Pant.H Atlanta bleu/como PC 55/45例如上面的字符串,取前2个词就是 Pant.H Atlanta 大家有啥方法呢?

解决方案 »

  1.   

    取第二个空格的位置,然后用copy
      

  2.   


    uses StrUtils;procedure Get2Word(S: String;  var First, Second: String);
    var
      i, j: Integer;
    begin
      First := '';
      Second := '';
      i := Pos(' ', S);
      if i > 0 then
      begin
        First := Copy(S, 1, i - 1);
        j := PosEx(' ', S, i + 1);
        if j > i then Second := Copy(S, i + 1, j - i - 1);
      end;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      f, s: String;
    begin
      Get2Word('Pant.H Atlanta bleu/como PC 55/45', f, s);
      Showmessage(f);
      Showmessage(s);
    end;
      

  3.   

    论坛上这种问题很多,pos+copy函数
      

  4.   

    词与词之间是根据空格来区别的
    所以你可以这样写
    function TForm1.GetFront2Words(str: String): String;
    var
      tempStr ,sReturn: String ;
      iPos : Integer;
    begin
      tempStr := str;
      iPos := Pos(' ',str);
      sReturn := Copy(tempStr,1,iPos-1);
      Delete(tempStr,1,iPos);
      iPos := Pos(' ',str);
      sReturn := sReturn + ' ' + Copy(tempStr,1,iPos-1);
      Result := sReturn;
    end;
      

  5.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      s : String ;
    begin
       s := GetFront2Words('Pant.H Atlanta bleu/como PC 55/45') ;
       ShowMessage(s);
    end;function TForm1.GetFront2Words(str: String): String;
    var
      tempStr ,sReturn: String ;
      iPos : Integer;
    begin
      tempStr := str;
      iPos := Pos(' ',tempStr);
      sReturn := Copy(tempStr,1,iPos-1);
      Delete(tempStr,1,iPos);
      iPos := Pos(' ',tempStr);
      sReturn := sReturn + ' ' + Copy(tempStr,1,iPos-1);
      Result := sReturn;
    end;
      

  6.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      s: string;
      st: Tstringlist;
    begin
      st:=Tstringlist.Create;
      st.DelimitedText:='Pant.H Atlanta bleu/como PC 55/45';
      st.Delimiter:=' ';
      s:=st.Strings[0]+' '+st.Strings[1];
      st.Free;
      showmessage(s);
    end;
      

  7.   


    procedure TForm1.Button1Click(Sender: TObject);
    var
      s: string;
      st: Tstringlist;
    begin
      st:=Tstringlist.Create;
      st.DelimitedText:='Pant.H Atlanta bleu/como PC 55/45';
      st.Delimiter:=' ';
      s:=st.Strings[0]+' '+st.Strings[1];
      st.Free;
      showmessage(s);
    end;
      

  8.   


    function Get2Word(S: String): string;
    var
      i, j: Integer;
    begin
      Result:= '';
      i := Pos(' ', S);
      if i > 0 then
      begin
        j := PosEx(' ', S, i + 1);
        if j > i then 
        Result := Copy(S, 1, j + i - 1);
      end;
    end;我想把jadeluo的代码改成一个函数且不必区分开第一,第二个词,如上修改对吗?
      

  9.   

    yinqianyi前辈的方法貌似适用性更广,跟好啊,这样我想取任意词都可以了吗?
    牛!
      

  10.   

    用Tstringlist的.Strings[0]...Strings[st.count-1]不是每个单词都取出来了
      

  11.   


    function Get2Word(S: String): string;
    var
      st: Tstringlist;
    begin
      Result:='';
      st:=Tstringlist.Create;
      st.DelimitedText:=S;
      st.Delimiter:=' ';
      Result:=st.Strings[0]+' '+st.Strings[1];
      st.Free;
    end;换成函数这样修改对么?
      

  12.   

    用TStringList的Delimiter是有问题的,因为它会把逗号也看成分隔符,如果象这样调用 Get2Word('A,B C')),就出问题了。
      

  13.   

    你说的是.CommaText吧,用Delimiter没问题,可以试下
      

  14.   

    修改一下,能够处理前两个单词之间有多个空格的情况:
    function Get2Word(S: String): string;
    var
      i, j : Integer;
      b : Boolean;
    begin
      S := Trim(S);
      Result := S;
      j := 0;
      b := False;
      for i := 1 to Length(S) do
      begin
        if S[i] = ' ' then
        begin
          if not b then
          begin
            b := True;
            inc(j);
            if j = 2 then
            begin
              Result := copy(S, 1, i - 1);
              break;
            end;
          end;
        end
        else b := False;
      end;
    end;
      

  15.   

    我晕死,我的TStringList怎么没有DelimitedText 和Delimiter 属性