这是我写的一个小函数调用方法如下:TempStr := '1|16981820|1091503|6767666|70|%|200406|4|#';TempValue := GetSubstr(TempStr,'|',2); 得到'16981820';//得到在s_str中的第po位字符串,以d_str为分隔。 function GetSubstr(s_str, d_str: string; po: integer): string; //s_str大字符串,d_str分隔符,po位置 var i, j, k: integer; begin Result := ''; if po < 1 then exit; s_str := trim(s_str) + d_str; i := 0; while 1 = 1 do begin if Pos(d_str, s_str) > 0 then begin j := Pos(d_str, s_str) + length(d_str); k := length(s_str) - (j - 1); i := i + 1; if i = po then begin j := Pos(d_str, s_str); Result := copy(s_str, 1, j - 1); break; end; s_str := copy(s_str, j, k); end else break; end; end;再给你一个函数,如果你不知道出现次数,可用下面的得到。AppearTimes := GetAppearTimes(TempStr,'|');//得到substr在str中出现的次数 function GetAppearTimes(Substr, Str: string): integer; var i: integer; lstr: string; begin lstr := Str; i := 0; while Pos(Substr, lstr) > 0 do begin i := i + 1; lstr := copy(lstr, Pos(Substr, lstr) + length(Substr), length(lstr) - length(Substr)); end; Result := i; end;
var i: integer; s, s1: string; begin s := '1|16981820|1091503|6767666|70|%|200406|4|#'; i := pos('|', s); while i> 0 do begin s1 := copy(s, 1, i-1); showMessage(s1); delete(s, 1, i); i := pos('|', s); end; end;
var t:TStringList; begin t:=TStringList.Create; t.Delimiter:='|'; t.DelimitedText:='1|16981820|1091503|6767666|70|%|200406|4|#'; ShowMessage(t.Strings[2]); //提取‘1091503’ end;
得到'16981820';//得到在s_str中的第po位字符串,以d_str为分隔。
function GetSubstr(s_str, d_str: string; po: integer): string; //s_str大字符串,d_str分隔符,po位置
var
i, j, k: integer;
begin
Result := '';
if po < 1 then
exit;
s_str := trim(s_str) + d_str;
i := 0;
while 1 = 1 do
begin
if Pos(d_str, s_str) > 0 then
begin
j := Pos(d_str, s_str) + length(d_str);
k := length(s_str) - (j - 1);
i := i + 1;
if i = po then
begin
j := Pos(d_str, s_str);
Result := copy(s_str, 1, j - 1);
break;
end;
s_str := copy(s_str, j, k);
end
else
break;
end;
end;再给你一个函数,如果你不知道出现次数,可用下面的得到。AppearTimes := GetAppearTimes(TempStr,'|');//得到substr在str中出现的次数
function GetAppearTimes(Substr, Str: string): integer;
var
i: integer;
lstr: string;
begin
lstr := Str;
i := 0;
while Pos(Substr, lstr) > 0 do
begin
i := i + 1;
lstr := copy(lstr, Pos(Substr, lstr) + length(Substr), length(lstr) - length(Substr));
end;
Result := i;
end;
s, s1: string;
begin
s := '1|16981820|1091503|6767666|70|%|200406|4|#';
i := pos('|', s);
while i> 0 do
begin
s1 := copy(s, 1, i-1);
showMessage(s1);
delete(s, 1, i);
i := pos('|', s);
end;
end;
stringlist.DelimitedText := '你的字符串';
然后,所有分解好的字符串就在stringlist中了。
t:TStringList;
begin
t:=TStringList.Create;
t.Delimiter:='|';
t.DelimitedText:='1|16981820|1091503|6767666|70|%|200406|4|#'; ShowMessage(t.Strings[2]); //提取‘1091503’
end;