文本文件内容为:20030714.15:45:36,111111 222222 333 545555 7777 7788
20030714.18:15:20,33441 457822 3546 3453555 866 2235
…… ……
每一行中,第一个是时间,剩下的是数据,每个数据之间是以空格分开的,我想分别得到这些数据,怎么实现?谢谢!

解决方案 »

  1.   

    先给出一个函数:
    Function GetStrForSpace(SourceStr :String ; JGZF:char ; Index:integer):String;
    var
       Pchar1 : pchar;
       i , count : integer;
       cStr : string;
    begin
       Count := 0;
       Pchar1 := pchar(SourceStr);
       cStr := '';
       for i:=0 to length(Pchar1)-1 do begin
          if pchar1[i] = JGZF then
             begin
                Count := Count + 1;
                if Count = Index then begin
                   break;
                end;
             end
          else if Count = Index -1 then cStr := cStr + pchar1[i];
       end;
       Result := cStr;
    end;
    然后再来.
    var
      str: string;
      datestr : string;//日期字符
      datastr : string;//数据字符
    begin
      str:='20030714.15:45:36,111111 222222 333 545555 7777 7788';
      datestr:=copy(str,1,pos(',',str)-1);//得到日期字符.
      datastr:=Copy(str,pos(',',str)+1,length(str));//得到数据字符.  GetStrForSpace(datastr,' ',1);//这是取第一个有空格的前面的数字.结果为11111;
     GetStrForSpace(datastr,' ',2);//这是取第2个有空格的前面的数字.结果为222222; GetStrForSpace(datastr,' ',3);//这是取第3个有空格的前面的数字.结果为333;
     GetStrForSpace(datastr,' ',4);//这是取第4个有空格的前面的数字.结果为515555;
    .................
    明白了?
      

  2.   

    如果数据之间都是以空格分开,直接用Readln函数就行
    Readln(TF,str1,str2,str3,str4,str5,str6,str7,...);
      

  3.   

    我喜欢用‘*’开始‘#’做间隔格式化信息。sMsg是远端传来的按刚才的规格格式化的字符串。
    {e.g :  sMsg='*value#value#value#value#value#value#'
    rcvtemp:=smsg;
     for i:=1 to 6 do
      begin
       p1:=pos('*',rcvtemp);p2:=pos('#',rcvtemp);
       str[i]:=copy(rcvtemp,p1+1,p2-p1-1);
       rcvtemp[p1]:='!';rcvtemp[p2]:='*';
      end;
    我觉得代码简短些,我喜欢。
      

  4.   

    function  GetChar(var str:string ):Tstrings;
         var
          num :Tstrings;
          begin
          str:=trim(str);
          num:=tstringlist.Create;
          while pos(' ',str)>0 do
            begin
            trim(str);
            num.Add(copy(str,1,pos(' ',str)));
            delete(str,1,pos(' ',str));
            pos(' ',str);
            end ;
            num.Add(str);
           Result:=num;
          end;