有一个字符串string类型或PChar类型,其中的数据是以某个字符作为分隔,现需要取某个特定的域,谁有这样的函数?
例: 有一个字符串'111111-222222-33333-44444'
取其中以'-'作为分隔符的第二个域应为'222222'

解决方案 »

  1.   

    //s='111111-222222-33333-44444'
    function getstr(s:string):string;
    Var
      sl:TStringList;
    begin
      sl:=TStringList.Create;
      sl.Delimiter := '-';
      sl.DelimiterText:= s;
      result:=sl[1];  //sl[1]='222222'
      sl.Free;
    end;
      

  2.   

    给你两个函数,自己写的,你试试吧。你可以用第二个来解决你的问题,如:s='111111-222222-33333-44444';
    TempStr:=GetSubstr(s,'-',2) ; 即可。第一个函数一般用来数分隔写作出现个数,你也会用的到的。//得到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_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;