关于文本POS查询有问

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

...全文
115 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsfzxjy 2012-11-26
  • 打赏
  • 举报
回复
顶楼上。。。
cdchq 2012-11-26
  • 打赏
  • 举报
回复
很多方法 1.使用PosEx来搜索,这个可以指定开始搜索的位置。需要uses StrUtils 2.找到第一个后,把第一个替换成其它字符,再pos。
蓝色光芒 2012-11-26
  • 打赏
  • 举报
回复
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;
feiba7288 2012-11-26
  • 打赏
  • 举报
回复
修改下,函数第一行可修改成如下: if iIndex < 2 then begin Result := Pos(Substr, S); Exit; end;
feiba7288 2012-11-26
  • 打赏
  • 举报
回复
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;

16,742

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧