2009-11-03 127 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

相关问题