SirThornberry hat in
diesem Betrag folgenden Code gepostet, der die Position des X-ten Vorkommens eines Strings ermittelt. Es kann, ähnlich wie bei
PosEx angegeben werden, ab welcher Position das X-te Vorkommen gesucht werden soll. In der Praxis benötigt man meistens nicht beide Funktionen gleichzeitig, sondern entwerde die Ermittlung des X-ten Vorkommens vonm Anfang an, oder die Ermittlung eines Vorkommens ab einer bestimmten Position (vgl. PosEx).
Delphi-Quellcode:
function GetPosNumX(
const ASubStr, AFullStr:
String; AFoundCnt: Word; AStartPos: Integer=1): Integer;
var
LFoundCnt : Word;
LCompCnt,
LFullLen,
LGiveback,
LMax,
LPos,
LSubLen : Integer;
LPtr1,
LPtr2 : PChar;
begin
LFullLen := Length(AFullStr);
LSubLen := Length(ASubStr);
if (AStartPos < LFullLen - LSubLen + 2)
then
begin
// An dieser Stelle incrementieren da wir sonst an 2 anderen Stelle
// incrementieren müssten
dec(AStartPos);
LGiveback := 0;
LFoundCnt := 0;
LMax := LFullLen - LSubLen + 2;
LPtr1 := PChar(AFullStr) + AStartPos;
LPtr2 := PChar(ASubStr);
for LPos := AStartPos
to LMax
do
begin
LCompCnt := 0;
while (LCompCnt < LSubLen)
and (LPtr1[LCompCnt] = LPtr2[LCompCnt])
do
inc(LCompCnt);
if LCompCnt = LSubLen
then
begin
inc(LFoundCnt);
if LFoundCnt = AFoundCnt
then
begin
LGiveback := LPos + 1;
Break;
end;
end;
inc(Cardinal(LPtr1));
end;
result := LGiveback;
end else
result := 0;
end;