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
我要取最后一行的数据,速度要快
STX 130 AX07-1109202BP-SC_43
STX 130 AX07-1109202BP-SC_42 首先判断这个文件有没有
最终我要得到变量
A=STX
B=130
C=AX07-1109202BP-SC_42
我要取最后一行的数据,速度要快
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;
begin end;
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;
补充: 如何取得最后一行stx 到 etx 之间的字符 也就是
130 305 9044 0 AX07-1109202BP-SC_42 LP-1023.RCP 2011-10-18 15:40:46
{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;
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;
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;
用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]);
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 之间的字符