Hab mich überzeugen lassen, "MyStrPosEx('77', '777')" liefert jetzt nur noch eine Fundstelle an Position 1.
Die Ergebnisse stimmen mit StrPosEx('77', '777', Positions) überein.
Delphi-Quellcode:
function MyStrPosEx(const SearchFor, SearchIn: string; Estimated: Integer = 0): TIntegerDynArray;
function Search(const SearchFor, SearchIn: string; var Index: Integer): Boolean; inline;
begin
Index := Pos(SearchFor, SearchIn, Index);
Result := (Index > 0);
end;
begin
SetLength(Result, Estimated);
var Count: Integer := 0;
var Index: Integer := 1;
var SearchForLength := Length(SearchFor);
while Search(SearchFor, SearchIn, Index) do
begin
Inc(Count);
if Estimated < Count then
begin
Estimated := Count * 2;
SetLength(Result, Estimated);
end;
Result[Count - 1] := Index;
Inc(Index, SearchForLength);
end;
SetLength(Result, Count);
end;