delphi 快速查询PosEx与PosRightEx  
官方Delphi 学习QQ群: 682628230(三千人)
频道

delphi 快速查询PosEx与PosRightEx


1.PosEx

功能说明:实现正向增强查询,跟FastCodePosEx功能相同,不依赖fastCode;

OffSet为偏移位置,通过测试,速度要比FastCodePosEx稍慢。

function PosEx(const SubStr,S:AnsiString;const Offset:Cardinal=1):Integer;
var
iPos: Integer;
i, j,LenS,LenSub: Integer;
PCharS, PCharSub: PChar;
begin
Result := 0;
LenS:=Length(S);
lenSub := length(Substr);
if (LenS=0) Or (lenSub=0) then Exit;
if (LenS-lenSub)
PCharS := PChar(s);
PCharSub := PChar(Substr);

for I := Offset-1 to LenS-1 do
begin
if lens-Ifor j := 0 to lenSub - 1 do
if PCharS[i + j] <> PCharSub[j] then
break
else if J=LenSub-1 then
begin
Result:=I+1;
Exit;
end;
end;
end;

2.PosRightEx

功能说明:实现反向增强查询;

OffSet为偏移位置,通过指定Offset,只查询Offset以前位置(包括Offset所在位置字符)。查询方法为从右向左最比。与PosEx效率相同。

function PosRightEx(const SubStr,S:AnsiString;const Offset:Cardinal=MaxInt):Integer;
var
iPos: Integer;
i, j,Len,LenS,LenSub: Integer;
PCharS, PCharSub: PChar;
begin
Result := 0;
LenS:=Length(S);
lenSub := length(Substr);
if (LenS=0) Or (lenSub=0) then Exit;
if Offset
PCharS := PChar(s);
PCharSub := PChar(Substr);

Len:=Offset;
if Len>LenS then
Len:=LenS;

for I := Len-1 downto 0 do
begin
if Ifor j := lenSub - 1 downto 0 do
if PCharS[i -lenSub+j+1] <> PCharSub[j] then
break
else if J=0 then
begin
Result:=I-lenSub+2;
Exit;
end;
end;
end;

以上两个函数都是大小写敏感的,可以通过自己修改对比方法。


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.038424968719482 seconds