2009-11-03 130 views
1

我想從文本文件中獲取數據到列表視圖。如何在列表視圖中顯示文本文件中的數據?

示例文本文件包含:

 
0th member 
first=XXXXXXXX 
second=YYYYY000 
1 
first=XXXXXXX1 
second=YYY1111 
2 
first=XXXXXX22 
second=YYYY2222 
3 
first=XXXXXX33 
second=YYYY333 
4 
first=XXXXX4444 
second=YYY4444 

喜歡,我想先listview.items.caption和第二的數值爲[0] sunitems。 我想在列表視圖行中獲取所有這些信息。

我該怎麼做?我玩stringlist.values,但我在所有行中獲得第0個成員數據。

回答

5

在窗體上放置一個TListView,並將其樣式設置爲vsList。創建您想要顯示的三列(右鍵單擊ListView並從彈出菜單中選擇列編輯器)。

以下添加到FormShow()事件(或任何你想它):

procedure TForm1.FormShow(Sender: TObject); 
var 
    SL: TStringList; 
    i: Integer; 
begin 
    SL := TStringList.Create; 
    try 
    SL.LoadFromFile(YourFileNameHere); 
    i := 0; 
    while i < SL.Count do 
    begin 
     with ListView1.Items.Add do 
     begin 
     Caption := SL[i]; 
     SubItems.Add(SL[i + 1]); 
     SubItems.Add(SL[i + 2]); 
     end; 
     Inc(i, 3); 
    end; 
    finally 
    SL.Free; 
    end; 
end; 

注意,這裏假設你正在尋找的是這樣的:

 
    0th member   first=XXXXX   second=YYYYY 
    1     first=ZZZZZ   second=ZZZZZ 

如果你正在尋找的是更喜歡:

 
    0th member   XXXXX    YYYYY 
    1     ZZZZZ    ZZZZZ 

然後更改子項()調用的東西升ike this:

 
    SubItems.Add(Copy(SL[i + 1], Pos('=', SL[i + 1]) + 1, MaxInt); 
    SubItems.Add(Copy(SL[i + 2], Pos('=', SL[i + 2]) + 1, MaxInt); 

這會從兩個子列的文本值中提取等號(=)後的部分。

這應該足以讓你開始,我想。

請注意,當ViewStyle設置爲vsReport並且您沒有在IDE中定義任何項目時,Delphi 2010在TListView中存在一個錯誤。由於未定義的項目,當您嘗試運行應用程序時,會出現流讀取錯誤。您可以解決此通過在設計時廢話值創建一個虛擬的項目,並在你的FormShow()事件中添加以下內容作爲第一個可執行行:

 
    ListView1.Items.Clear; 

這得到過去認爲DFM是點流入,這是什麼觸發錯誤。

編輯:在閱讀由OP評論。要跳過空白行:

// To skip entire group if starting line is blank 
    while i < SL.Count - 1 do 
    begin 
    if SL[i] <> '' then 
    begin 
     with ListView1.Items.Add do 
     // just like before 
    end 
    Inc(i, 3); 
    end; 

要子項目只跳過空白行:

while i < SL.Count - 1 do 
    begin 
    with ListView1.Items.Add do 
    begin 
     Caption := SL[i]; 
     if SL[i + 1] <> '' then 
     SubItems.Add(SL[i + 1]); 
     if SL[i + 2] <> '' then 
     SubItems.Add(SL[i + 2]; 
    end; 
    Inc(i, 3); 
    end; 
+0

謝謝回覆,先生,我需要酷似行1標題:XXXXXXXX分項YYYYY000線2標題:XXXXXX11子項目:YYYY11111 ;第3行-----(等),我已經嘗試過你的方法先生,它的工作正常,如果所有的數據逐行。在我的文本文件中,所有的數據不會一行一行地輸入,然後我在listview中獲得空的字段。無論文件中出現多少空行,我都可以獲取數據嗎?提前致謝 。 – noob 2009-11-04 04:36:56

+0

嗯, 我得到它的工作先生,空行,無論如何感謝您的主意先生。 我很想知道我可以用str.values做到這一點嗎? – noob 2009-11-04 06:02:41

+0

對於空格,您可以在添加之前先檢查(請參閱我的編輯)。我不確定「str.values」是什麼意思? – 2009-11-04 13:37:40

相關問題