现有字符串:
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。有什么好办法么?

解决方案 »

  1.   

    用pos('&',string)取得各个子串,应该可以的
      

  2.   

    用ExtractStrings函数,给你一个例子。procedure TForm1.Button1Click(Sender: TObject);
    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;
      

  3.   

    取=和&之间的字符,把=和&的位置找到不就行了,用pos取
      

  4.   

    又学到了一招 Dlwxn(韩飞子)的办法很好的 直接分解了字符串为目标
    可以保存到数组的
      

  5.   

    用Pos可以取的,但 Dlwxn(韩飞子) ( ) 的方法更好,很简单,我刚试过!谢谢 Dlwxn(韩飞子) ( ) !
      

  6.   


    用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;
      

  7.   

    送你一个自己的函数 是以空格来分割的 自己再加一个参数吧!!!
    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;
      

  8.   

    把这个函数简单的讲一下吧。
    ExtractStrings(['&'],[],PChar(s),strs);谢谢了。