2.txtSTX 130  AX07-1109202BP-SC_44 
STX 130  AX07-1109202BP-SC_43 
STX 130  AX07-1109202BP-SC_42 首先判断这个文件有没有
最终我要得到变量
A=STX
B=130
C=AX07-1109202BP-SC_42 
我要取最后一行的数据,速度要快

解决方案 »

  1.   

    StringList的LoadFromFile,然后循环StringList,以空格分隔,用到DelimitedText和Delimiter
      

  2.   

    var StringList:TStrings;
        s,A,B,C:string;
    begin
      StringList:=TStringList.Create;
      try
        StringList.LoadFromFile('c:\2.txt');
        s:=copy(StringList.Text,length(StringList.Text)-27,28);
        if length(s)=28 then begin
          A:=copy(s,1,3);
          B:=copy(s,5,3);
          C:=copy(s,9,20);
        end
        else showmessage('无可取数据。');
      except
        showmessage('无法加载文件 c:\2.txt');
      end;
    end;
      

  3.   

    同 bdmh.判断文件有没有是   if FileExists('C:\2.txt') then
      begin  end;
      

  4.   

    {XE2}uses System.Types, System.StrUtils;procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
      s: TStringDynArray;
    begin
      s := SplitString('STX 130 AX07-1109202BP-SC_42',' ');
      for I := Low(S) to High(S) do
        ShowMessage(s[i]);
    end;
      

  5.   

    STX 130 305 9044 0 AX07-1109202BP-SC_44 LP-1023.RCP 2011-10-18 15:33:01 ETXSTX 130 305 9044 1 AX07-1109202BP-SC_44 LP-1023.RCP 2011-10-18 15:38:27 ETXSTX 130 305 9044 0 AX07-1109202BP-SC_42 LP-1023.RCP 2011-10-18 15:40:46 ETX
    补充: 如何取得最后一行stx 到 etx 之间的字符 也就是
    130 305 9044 0 AX07-1109202BP-SC_42 LP-1023.RCP 2011-10-18 15:40:46 
      

  6.   


    {XE2}
    uses System.Types, System.StrUtils;procedure TForm1.Button1Click(Sender: TObject);
    var
      i: Integer;
      s: TStringDynArray;
    begin
      s := SplitString
        ('STX 130 305 9044 0 AX07-1109202BP-SC_42 LP-1023.RCP 2011-10-18 15:40:46 ETX',
        ' ');
      for i := Low(s) + 1 to High(s) - 1 do
        ShowMessage(s[i]);
    end;
      

  7.   

    楼上的虽然简单,但受版本局限,用个循环就解决了procedure TForm1.Button1Click(Sender: TObject);
    var s:TStrings;
        tmp:string;
        A:array[1..8] of string;
        i,x:integer;
    begin
      if FileExists('C:\2.txt') then
      begin
        s:=TStringList.Create;
        s.LoadFromFile('c:\2.txt');
        if length(s.Text)>=75 then
        begin
          tmp:=RightStr(Trim(s.Text),71);
          for i:=1 to 8 do
          begin
            x:=pos(' ',tmp);
            A[i]:=copy(tmp,1,x-1);
            delete(tmp,1,x);
          end;
    //      for i:=1 to 8 do showmessage(A[i]);显示各个值
        end;
      end
      else showmessage('C:\2.txt 文件不存在');
    end;
      

  8.   


    var
      Content : TStrings;
      Line,Target:string;
      i,iPosLeft,iPosRight : Integer;
    begin
      if FileExists('2.txt') then
      begin
        Content := TStringList.Create;
        try
          Content.LoadFromFile('2.txt');
          for i := 0 to Content.Count - 1 do
          begin
            Line := Content[i];        iPosLeft  := Pos('STX',Line) + Length('STX');
            iPosRight := Pos('ETX',Line);        if ((iPosLeft >= 0) and (iPosRight >= 0)) then
            begin
              //此处提取
              Target := Trim(Copy(Line,iPosLeft,iPosRight - iPosLeft));
            end;
          end;
        finally
          Content.Free;
        end;
      end else
        ShowMessage('XXXXXX');
    end;
      

  9.   

    楼上答案挺多 
    用StringReplace来分割成数组最方便了  SS:= TStringList.create;
      SS.Text :=  StringReplace(STX 130 305 9044 0 AX07-1109202BP-SC_42 LP-1023.RCP 2011-10-18 15:40:46 ETX, ' ', #13#10, [rfReplaceAll]);
      for I:=0 SS.count do
        showmessage(ss[I]);
      

  10.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
     s:Tstringlist;
     i:integer;
     str:string;
    begin
     listbox1.Items.Clear;
     s:=Tstringlist.Create;
     str:=' 130 305 9044 0 AX07-1109202BP-SC_42 LP-1023.RCP 2011-10-18 15:40:46 ';
     try
      s.Assign(form1.SplitString(str,' '));
      for i:=0 to s.Count-1 do
       listbox1.Items.Add(s.Strings[i]);
     finally
      freeandnil(s);
     end;
    end;
      function TForm1.SplitString(const Source, ch: string): TStringList;
    var
    temp:String;
    i:Integer;
    begin
     Result:=TStringList.Create;
    //如果是空自符串则返回空列表
     if Source='' then exit;
      temp:=Source;
     i:=pos(ch,Source);
     while i<>0 do
      begin
       Result.add(copy(temp,0,i-1));
       Delete(temp,1,i);
       i:=pos(ch,temp);
      end;
    Result.add(temp);
    end;关键是如何取得最后一行stx 到 etx 之间的字符