现有字符串:
CID=1&Page=3&PTag=2&MISC_ID=999&MISC_SessionID=999-1gtynVii!-1216964527!1212671891!1071705458542&MISC_ServiceID=04101038&MISC_AccessMode=2&MISC_MID=00126012677924每个项目用&分隔,目的是提出每个等号后面的参数,每个参数是不定长的,肯定无法用取子串的方法取得。用Delimiter提到StringList好像也不行,因为IndexOf()只能匹配完整的String。有什么好办法么?
CID=1&Page=3&PTag=2&MISC_ID=999&MISC_SessionID=999-1gtynVii!-1216964527!1212671891!1071705458542&MISC_ServiceID=04101038&MISC_AccessMode=2&MISC_MID=00126012677924每个项目用&分隔,目的是提出每个等号后面的参数,每个参数是不定长的,肯定无法用取子串的方法取得。用Delimiter提到StringList好像也不行,因为IndexOf()只能匹配完整的String。有什么好办法么?
var
strs:tstringlist;
i:integer;
s:String;
begin
s:='CID=1&Page=3&PTag=2&MISC_ID=999&MISC_SessionID=999-1gtynVii!-1216964527!1212671891!1071705458542&MISC_ServiceID=04101038&MISC_AccessMode=2&MISC_MID=00126012677924';
strs:=tstringlist.create;
ExtractStrings(['&'],[],PChar(s),strs);
for i:=0 to strs.Count -1 do
ShowMessage(strs.Strings[i]);
strs.free;
end;
可以保存到数组的
用StringReplace procedure TForm1.Button1Click(Sender: TObject);
var
s :String;
begin
s:='CID=1&Page=3&PTag=2&MISC_ID=999&MISC_SessionID=999-1gtynVii!-1216964527!1212671891!1071705458542&MISC_ServiceID=04101038&MISC_AccessMode=2&MISC_MID=00126012677924';
s := StringReplace(s, '&', Chr(13) + Chr(10), [rfReplaceAll]);
Memo1.Lines.text := s;
end;
Procedure GetDataFromStr(S:String;DataStrlist:TStringlist);
var
i:integer;
BlankCount:integer;
Head:integer;
begin
Head:=1;
BlankCount:=0;
for i:=1 to length(S) do
begin
if (Copy(S,i,1)=' ') or (i=length(S)) then
begin
if BlankCount=0 then
DataStrlist.Add(Copy(S,Head,i-Head));
BlankCount:=BlankCount+1;
Head:=i+1;
end
else
BlankCount:=0;
end;
end;
ExtractStrings(['&'],[],PChar(s),strs);谢谢了。