2011-10-13 23 views
5
Var 
    i : Integer; 
    j : Integer; 
    oSLArray : array of TStringList; 
    oSL : TStringList; 
begin 
    SetLength(oSLArray, emailPassword.Lines.Count); 
    for i := 0 to emailPassword.Lines.Count - 1 do 
    {oSLArray[i] := TStringList.Create; 
    oSLArray[i].Delimiter := ' '; 
    oSLArray[i].DelimitedText := emailPassword.Lines[i]; 
    for j := 0 to oSLArray[i].Count-1 do begin 
     Showmessage(oSLArray[i].Strings[j]); 
    end; } 
    oSL := TStringList.Create; 
    oSL.Delimiter := ' '; 
    oSL.DelimitedText := emailPassword.Lines[i]; 
    for j := 0 to oSL.Count-1 do begin 
     Showmessage(oSL[j]); 
    end; 
    end; 

Tôi đang cố gắng để thực hiện một loạt các TStringLists, đọc những gì sắp tới từ RichEdit 'EmailPassword', và sau đó in nó (Tôi sẽ đặt nó trong một mảng khi tôi nhận được đến nay).Có rắc rối thiết mảng của TStringLists trong Delphi

Khi tôi bỏ ghi chú OSLarray, tôi nhận được vi phạm quyền truy cập. Khi tôi thử nó với oSL, không có gì được in.

Bây giờ, tôi hiểu một sự vi phạm truy cập có nghĩa là con trỏ có thể không được đặt đúng, vì tôi nghĩ rằng vi phạm truy cập đang xảy ra tại oSLArray [i]: = TStringList.Create.

Tôi chỉ thiếu một thứ gì đó nhỏ?

+0

là emailPassword nil? Điều đó sẽ gây ra một AV, nhưng một vài li9nes trước đó. –

+0

Bạn muốn chúng tôi làm gì với mã được nhận xét? –

Trả lời

7

Tôi đã sửa mã, tôi tin rằng mã này sẽ hoạt động, nhưng tôi chỉ thử nghiệm nó trong đầu.

var 
    i : Integer; 
    j : Integer; 
    oSLArray : array of TStringList; 
    oSL : TStringList; 
begin 
    if not(Assigned(emailpassword)) then exit; 
    SetLength(oSLArray, emailPassword.Lines.Count); 
    for i := 0 to emailPassword.Lines.Count - 1 do begin 
    oSLArray[i] := TStringList.Create; 
    oSLArray[i].Delimiter := ' '; 
    oSLArray[i].DelimitedText := emailPassword.Lines[i]; 
    for j := 0 to oSLArray[i].Count-1 do begin 
     Showmessage(oSLArray[i].Strings[j]); <<--- The error has here 
    end; {for j} 
    end; {for i} 

    //oSL := TStringList.Create; 
    //try 
    // oSL.Delimiter := ' '; 
    // oSL.DelimitedText := emailPassword.Lines[i]; 
    // for j := 0 to oSL.Count-1 do begin 
    // Showmessage(oSL[j]); 
    // end; {for j} 
    //finally 
    // oSL.Free; 
    //end; {try} 
    //end; {for i} 
end; 

Đây là mã cũ của bạn với ý kiến:

for i := 0 to emailPassword.Lines.Count - 1 do //don't forget begin 
    oSLArray[i] := TStringList.Create; 
    oSLArray[i].Delimiter := ' '; 
    oSLArray[i].DelimitedText := emailPassword.Lines[i]; 
//<<<-- Here for i loop should end, but it does not. 
    for j := 0 to oSLArray[i].Count-1 do begin 
//You loop though all members of OSLArtray, even though only the first item is set, 
//the rest is unassigned. 
     Showmessage(oSLArray[i].Strings[j]); <<-- Access Violation 
    end; } 
+2

Ah! Thiếu 'bắt đầu'! Vì tôi không bao giờ viết mã mà không có 'bắt đầu' tôi đã mất khả năng phát hiện ra rằng nó có thể bị thiếu. –

+0

@DavidHeffernan, thường không phải là người có cơ hội gỡ lỗi cho bạn. – Johan

+1

Ồ, tôi không biết về điều đó. Xảy ra mọi lúc. Dù sao, bạn đã đánh bại tốt và thích hợp trên này! +1 –

4

Sự vắng mặt của một bắt đầu/cặp cuối cùng là vấn đề. Nếu không có ý kiến, các

for i := 0 to emailPassword.Lines.Count - 1 do 

vòng lặp chỉ dòng

oSLArray[i] := TStringList.Create; 

dòng

oSLArray[i].Delimiter := ' '; 

được thực hiện sau khi các vòng lặp.

+2

+1 để cung cấp giải thích về lý do mã OP không hoạt động. –

Các vấn đề liên quan