郁闷,为什么得不到预期的结果?请帮忙看看
文本文件格式如下:D:\delphi源码\读入文本\my_text.txt(其格式见下面4行)----
nihao1 ¦58123 ¦00:00:00 ¦00:01:00 ¦00:09:00  
nihao2 ¦58124 ¦00:00:20 ¦00:01:20 ¦00:09:20  
nihao3 ¦58125 ¦00:00:40 ¦00:01:40 ¦00:09:40  
nihao4 ¦58126 ¦00:00:50 ¦00:01:50 ¦00:09:50 
我的要求是将上面的文本文件转换格式后显示在Tlistview控件上显示为----
nihao1  58123  00:00:00  00:01:00  00:09:00  
nihao2  58124  00:00:20  00:01:20  00:09:20  
nihao3  58125  00:00:40  00:01:40  00:09:40  
nihao4  58126  00:00:50  00:01:50  00:09:50 
代码如下:
procedure TForm1.Button1Click(Sender: TObject);
var
  DstList:TStringList;
  strList:TStringList;
  i,j:Integer;
  Item:TListItem;//需要在uses里加上ComCtrls,否则会出错
begin
      DstList:=TStringList.Create;   
      strList:=TStringList.Create;
      try   
          DstList.LoadFromFile('D:\delphi源码\读入文本\my_text.txt');   
          for i:=0 to DstList.Count-1 do   
          begin   
              strList.Clear;
              ExtractStrings(['|'],[ ],PChar(DstList[i]),strList);
              if strList.Count=0 then Continue;
              Item:=lvService.Items.Add;
              Item.Caption:=strList[0];
              for j:=1 to strList.Count-1 do
                  Item.SubItems.Add(strList[j]);
          end;   
      finally   
          strList.Free;   
          DstList.Free;   
      end;
end;
为什么程序运行后在Tlistview控件上显示为(这不是我的目的):
nihao1  nihao2  nihao3  nihao4  
我的目的是显示为:
nihao1  58123  00:00:00  00:01:00  00:09:00  
nihao2  58124  00:00:20  00:01:20  00:09:20  
nihao3  58125  00:00:40  00:01:40  00:09:40  
nihao4  58126  00:00:50  00:01:50  00:09:50请帮忙看看,我的程序哪里有问题。先谢谢了!!!

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject); 
    var 
      DstList:TStringList; 
      strList:TStringList; 
      i,j:Integer; 
      Item:TListItem;//需要在uses里加上ComCtrls,否则会出错 
    begin 
          DstList:=TStringList.Create;  
          strList:=TStringList.Create; 
          strList.Delimiter := '¦';
          try  
              DstList.LoadFromFile('D:\delphi源码\读入文本\my_text.txt');  
              for i:=0 to DstList.Count-1 do  
              begin  
                  strList.DelimitedText := DstList[i];
                  Item:=lvService.Items.Add; 
                  Item.Caption:=strList[0]; 
                  for j := 1 to strList.Count-1 do 
                      Item.SubItems.Add(strList[j]); 
              end;  
          finally  
              strList.Free;  
              DstList.Free;  
          end; 
    end; 
      

  2.   

    两种方法,用楼上的也可以,你的方法也没有错,ExtractStrings([' ¦'],[ ],PChar(DstList[i]),strList);这里的[' |']不应有空格
    procedure TForm1.Button1Click(Sender: TObject);
    var
      DstList:TStringList;
      strList:TStringList;
      i,j:Integer;
      Item:TListItem;//需要在uses里加上ComCtrls,否则会出错
    begin
          DstList:=TStringList.Create;
          strList:=TStringList.Create;
          try
              DstList.LoadFromFile('D:\aa.txt');
              //strList.Delimiter:='|';
              for i:=0 to DstList.Count-1 do
              begin
                  strList.Clear;
                  ExtractStrings(['|'],[],PChar(DstList[i]),strList);
                  //strList.CommaText := DstList[i];
                  if strList.Count=0 then Continue;
                  Item:=lvService.Items.Add;
                  Item.Caption:=strList[0];
                  for j:=1 to strList.Count-1 do
                      Item.SubItems.Add(strList[j]);
              end;
          finally
              strList.Free;
              DstList.Free; 
          end;
    end;
      

  3.   

    用你的方法也得不到正确的结果:错误的结果:程序运行后在Tlistview控件上显示为(这不是我的目的): 
    nihao1  nihao2  nihao3  nihao4  
    正确的结果应显示为: 
    nihao1  58123  00:00:00  00:01:00  00:09:00  
    nihao2  58124  00:00:20  00:01:20  00:09:20  
    nihao3  58125  00:00:40  00:01:40  00:09:40  
    nihao4  58126  00:00:50  00:01:50  00:09:50 
      

  4.   

    你的listview的属性viewstyle属性是什么,应该设置为vsReport
      

  5.   

    listview的属性viewstyle4中属性都试过了,仍不中用
      

  6.   

                  Item:=lvService.Items.Add; 
                  Item.Caption:=strList[0]; 
                  for j:=1 to strList.Count-1 do 
                      Item.SubItems.Add(strList[j]); 这个写法有错误,做循环不安全。
    你可以参考我下面的代码例子,一条一条来添加,反正行数也不多。
    注释部分就是你要的结果。记得结帖给分,谢谢!T: TListItem;     with dm.Q_WHOLE2 do 
        begin 
          close; 
          sql.clear; 
          sql.Add(v_sql_whole); 
          open; 
          if not isempty then 
          begin 
            first; 
            while not eof do 
            begin     
              T := ListView1.Items.Add; 
              T.Caption := trim(fieldbyname('PALLET').AsString); // nihao1  
              T.SubItems.Add(trim(fieldbyname('SEQ').AsString)); // 58123  
              T.SubItems.Add(trim(fieldbyname('SO').AsString)); // 00:00:00
              T.SubItems.Add(trim(fieldbyname('SO_LINE').AsString)); // 00:01:00
              T.SubItems.Add(trim(fieldbyname('SO_TQTY').AsString)); // 00:09:00 
              T.SubItems.Add(trim(fieldbyname('SO_IN_PALLET_TQTY').AsString)); 
              T.SubItems.Add(trim(fieldbyname('SO_IN_PALLET_IQTY').AsString)); 
              next; 
            end; 
          end 
          else 
          begin 
          end; 
        end;