现有这样的字串:
'1|16981820|1091503|6767666|70|%|200406|4|#'
其中字串长度每次不定。只以'|'分隔,如我想取任意'|'符
之间的字串应该怎样操作,用什么函数?

解决方案 »

  1.   

    这是我写的一个小函数调用方法如下: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;
      

  2.   

    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;
      

  3.   

    stringlist.Delimiter := '|';
    stringlist.DelimitedText := '你的字符串';
    然后,所有分解好的字符串就在stringlist中了。
      

  4.   

    var
      t:TStringList;
    begin
      t:=TStringList.Create;
      t.Delimiter:='|';
      t.DelimitedText:='1|16981820|1091503|6767666|70|%|200406|4|#';  ShowMessage(t.Strings[2]);        //提取‘1091503’
    end;