Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
Delphi XE2 Professional
|
AW: Alternative zu PosEx
29. Nov 2024, 02:10
Zum Vergleich mit Pos() und SetLength() für das Ergebnis:
Delphi-Quellcode:
function MyStrPosEx(const SearchFor, SearchIn: string): TIntegerDynArray;
function Search(var Index: Integer): Boolean;
begin
Index := Pos(SearchFor, SearchIn, Index + 1);
Result := (Index > 0);
end;
begin
var Count: Integer := 0;
var Index: Integer := 0;
while Search(Index) do
begin
Inc(Count);
{Array vergrößern braucht viel Zeit, deshalb gleich etwas mehr Platz reservieren}
if Length(Result) < Count then
SetLength(Result, Count * 4);
Result[Count - 1] := Index;
end;
SetLength(Result, Count);
end;
Code:
sRandomString := RandomString(MaxInt div 8 - 6) + 'PaPaPa'
0:00:01.327
SetLength(Positions, 3)
StrPosEx('PaPa', 'sRandomString', Positions)
0:00:00.081
Result = 1
Positions = [268435450,0,0]
Result := MyStrPosEx('PaPa', 'sRandomString')
0:00:00.075
Result = [268435450,268435452]
Und jetzt das Ganze noch einmal, wenn der zu durchsuchende Text 80 Mio Zeichen hat, nur aus "0" .. "9" besteht und Du die Fundstellen für die "7" haben möchtest.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
Geändert von Amateurprofi (29. Nov 2024 um 06:06 Uhr)
Grund: Korrigiert
|