delphi 怎么把TXT里面的内容逐行分割读取到listview里面。

如题。我弄了好久都没有弄好。。比如TXT文本如下。张三|80分|数学李四|81分|数学王麻子|82分|数学读到listview里面的效果如下。姓名成绩科目张三80分数学李... 如题。我弄了好久都没有弄好。。
比如TXT文本如下。
张三|80分|数学
李四|81分|数学
王麻子|82分|数学
读到listview里面的效果如下。

姓名 成绩 科目

张三 80分 数学
李四 81分 数学
王麻子 82分 数学

procedure TForm1.Button1Click(Sender: TObject);
var
str : string;
f : TextFile;
sdata : TStrings;
begin
AssignFile(f,'d:\result.txt');
reset(f);
sdata := TStringList.Create;
while not eof(f) do
begin
Readln(f,str);
ExtractStrings(['|'],[],PChar(str),sdata);
with ListView1.Items.Add do
begin
Caption := sdata[0];
SubItems.Add(sdata[1]);
subitems.Add(sdata[2]);
end;
end;
end;

EdisonChan1982 大哥,上面的是我看了好久的代码自己弄的,还是可以实现,但是我不知道有没有BUG.你能 帮我看下吗?
展开
 我来答
EdisonChan1982
2010-10-31 · TA获得超过451个赞
知道小有建树答主
回答量:134
采纳率:0%
帮助的人:84.8万
展开全部
procedure TForm1.Button2Click(Sender: TObject);
var
result_txt, save_txt : tstrings;
substr, str : String;
i, j, sub_i1, sub_i2 : Integer;
begin
result_txt := tstringlist.Create;
result_txt.LoadFromFile(ExtractFilePath(application.ExeName)+'result.txt');

save_txt := tstringlist.Create;

substr := '|'; //张三|80分|数学
for i:=0 to result_txt.Count-1 do
begin
str := result_txt[i];
sub_i1 := 0;
save_txt.Clear;
while pos(substr,str)>0 do
begin
sub_i2 := pos(substr,str);
save_txt.Add(copy(str,sub_i1+1,sub_i2-(sub_i1+1)));
str := copy(str,pos(substr,str)+1,length(str)-pos(substr,str)+1);
end;
save_txt.Add(str);

with lv_result.Items.Add do
begin
Caption := save_txt[0];
for j:=1 to save_txt.Count-1 do
begin
lv_result.Items[i].SubItems.Add(save_txt[j]);
end;
end;
end;

save_txt.Free;
result_txt.Free;
end;

列数不限,查找无限制,即只要是“|”为分隔符的都可以找到。
另外: HJ_3000 的答案有 BUG,如果内容含有空格的话,就找不到了。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
HJ_3000
2010-10-30 · TA获得超过563个赞
知道小有建树答主
回答量:1264
采纳率:78%
帮助的人:57.6万
展开全部
procedure TForm1.FormCreate(Sender: TObject);
Var
alist, blist: TStringlist;
I, J: Integer;
begin
alist := TStringlist.Create;
blist := TStringlist.Create;
try
alist.LoadFromFile('g:\a.txt');
for I := 0 to alist.Count - 1 do
begin
blist.Delimiter := '|';
blist.DelimitedText := alist[I];
if blist.Count = 3 then
begin
with ListView1.Items.Add Do
begin
caption := blist[0];
subitems.Add(blist[1]);
subitems.Add(blist[2]);
end;
end;
end;
finally
blist.Free;
alist.Free;
end;
end;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式