var
   i,j:integer;
begin
  mmo2.Lines.Clear;
  if  Temp=nil then
  Temp:=TStringList.Create();
  Temp.loadfromfile('D:\Data.dat');
  j:=Temp.Count;
  Temp.Delimiter := '|';
  for i:=5 to j-2 do
  begin
   Temp.DelimitedText :=trim(Decrypt(Temp.strings[i],PASS));
   mmo2.Lines.Add(Temp.Text);
  end;
end;第一次可以把第5行的数据读出来,但是第二次去读第6行时,提示错误了。请问如何把数据循环取出来,并赋值给变量。数据格式如下:
8:00|23.1|0.00|110|135|103.64|
8:10|25.1|0.07|160|175.6|10.64|如何把他们取出来并把8:00赋值给变量A,23.1赋值给变量B依此类推

解决方案 »

  1.   


    //把字符串以分隔符分开
    procedure DivideString(str,separate:string;var str_list:TStringList);
    var
        position:integer;
      strTemp :string;
    begin
      while length(str)>0 do
          begin
            position:=pos(separate,str);
          if position=0 then position:=length(str)+1;
          strTemp:=copy(str,1,position-1);
          str_list.Add(strTemp);
          delete(str,1,position);
        end;
    end;
      

  2.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      l : tstringlist;
    begin
      l := tstringlist.Create;
      DivideString('8:00|23.1|0.00|110|135|103.64|', '|', l);
      memo1.Text := l.Text;
      l.Free;
    end;
      

  3.   

    你想赋值给啥类型的变量??
    分割完直接赋值,要不就用类型转换函数将String转换成你想要的类型。
      

  4.   

    已经拆分好了,根据行数索引来读取被拆分值的位置,,,,,,,,,s := l[0]; //s:string; l : tstringlsit;
      

  5.   

    ...每行是一组数据!
    循环的意思是将第一行
    8:00|23.1|0.00|110|135|103.64|
    赋值给A,B,C,D,E,F变量
    然后读第二行
    8:10|25.1|0.07|160|175.6|10.64|
    再次赋值给A,B,C,D,E,F变量
      

  6.   

    用tstringlist来分割
    List := TStringList.Create;
      List.Delimiter := '|' ;
      List.DelimitedText := 'aaa|bbb|ccc|ddd' ;
    如果你每行的数据的个数是死的
    while j<list.count-1 do
    begin 
    for i:=j to j+6 do
    begin
    //变量赋值
    A:=list[i];
    end
    j:=J+6
    end
      

  7.   

    Delimiter 好像不能连续循环将一个Tstringlist的数据载入另LIST载入我用的sharebei的方法。就是赋值不知道怎么搞,读一航数据,就赋一次值,然后读下一行
      

  8.   

    你自己写的那个应该可以的,不过每次赋值之前先清空下stringlist,你说的读第六行报错是哪句报错了?
      

  9.   

    修改好了,谢谢。。代码如下var
      List : tstringlist;
      i,j:Integer;
    begin
      List := tstringlist.Create;
      if  Temp=nil then
      Temp:=TStringList.Create();
      Temp.loadfromfile('D:\Data.dat');
      j:=Temp.Count;
      List.Delimiter := '|' ;
      for i:=5 to j-1 do
      begin
      List.Clear;
      List.DelimitedText :=trim(Decrypt(Temp.strings[i],PASS));
      //数据赋值
      A:=List.Strings[0];
      B:=List.Strings[1];
      C:=List.Strings[2];
      D:=List.Strings[3];
      E:=List.Strings[4];
      F:=List.Strings[5];
      end;
      List.Free;
    end;