有一个文本:
类似这样
AAAA 123 321
BBBB 123 321
CCCC 123 321 
DDDD 123 321
AAAA 456 321
这个文本格式是这样 但是很长
我用POS(String,'AAAA')返回的是第一个AAAA的位置
如何返回第二个AAAA
第三个AAAA 
甚至更多个 AAAA的位置呢?
求高人解答 

解决方案 »

  1.   

    function PosN(Substr: ShortString; S: ShortString; iIndex: Integer): Integer;
    var
      n, iLen, iPos: Integer;
      sTemp: string;
    begin
      if iIndex <= 0 then
      begin
        Result := Pos(Substr, S);
        Exit;
      end;  n := 0;
      sTemp := S;
      Result := 0;
      iLen := Length(Substr);
      while n < iIndex do
      begin
        iPos := Pos(Substr, sTemp);
        if iPos > 0 then
        begin
          sTemp := Copy(sTemp, iPos + iLen, Length(sTemp) - iPos - iLen + 1);
          if n = 0 then
            Result := Result + iPos
          else
            Result := Result + iPos + iLen - 1;
        end
        else
        begin
          Result := 0;
          Break;
        end;
        Inc(n);
      end;
    end;procedure TForm1.Button8Click(Sender: TObject);
    begin
      Edit1.Text := IntToStr(PosN('AAA', Memo1.Text, SpinEdit1.Value));
    end;
      

  2.   

    修改下,函数第一行可修改成如下:
    if iIndex < 2 then
      begin
        Result := Pos(Substr, S);
        Exit;
      end;
      

  3.   

    Delphi 自带StrUtils单元,PosEx函数//需引用StrUtils单元
    var
      S , SubStr : String;
      n : integer;
    begin
      S := 'dAAABBCCDDAAAFFBB';
      SubStr := 'AA';
      n := 1;
      while True do begin
        n := PosEx(SubStr , S , n);
        if n=0 then Break;
        //第一种用法
        n := n + Length(SubStr);
        //第2种用法
        //n := n + 1
        ShowMessage(IntToStr(n));
      end;
    end;
      

  4.   

    很多方法
    1.使用PosEx来搜索,这个可以指定开始搜索的位置。需要uses StrUtils2.找到第一个后,把第一个替换成其它字符,再pos。