gpt4 book ai didi

delphi - 如何在 ListView 中显示文本文件中的数据?

转载 作者:行者123 更新时间:2023-12-02 00:47:36 25 4
gpt4 key购买 nike

我想将数据从文本文件获取到 ListView 。

示例文本文件包含:

0th memberfirst=XXXXXXXXsecond=YYYYY0001first=XXXXXXX1second=YYY11112first=XXXXXX22second=YYYY22223first=XXXXXX33second=YYYY3334first=XXXXX4444second=YYY4444

就像这样,我想获取 listview.items.caption 的第一个值和 sunitems[0] 的第二个值。我想获取 ListView 行中的所有信息。

我怎样才能做到这一点?我使用了 stringlist.values,但我在所有行中获取了第 0 个成员数据。

最佳答案

将 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

If what you're looking for is more like:

    0th member          XXXXX                YYYYY    1                   ZZZZZ                ZZZZZ

Then change the SubItems() calls to something like 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);

This extracts just the part after the equals (=) sign from the two subcolumn's text values.

That should be enough to get you started, I think.

Note that Delphi 2010 has a bug with the TListView when the ViewStyle is set to vsReport and you have defined no items in the IDE. You get a stream read error when you try and run your app because of the undefined items. You can work around this by creating a dummy item with a nonsense value at design time, and in your FormShow() event add the following as the first executable line:

    ListView1.Items.Clear;

This gets past the point that the DFM is streamed in, which is what triggers the bug.

EDIT: After reading comments by OP. To skip blank lines:

  // 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;

关于delphi - 如何在 ListView 中显示文本文件中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1668782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com