ReplaceString ist sehr mächtig, aber aufgrund seiner Optionen sehr langsam, vor allem, wenn die Strings sehr lang werden. Die folgende Funktion ist zwar case-sensitive, aber wenn das kein Problem darstellt, ist diese zu empfehlen, da sie ca. 40-80% Zeitersparniss mit sich bringt. Je größer der zu durchsuchende String und je mehr Ersetzungen stattfinden, destso langsamer wird Delphis
StringReplace.
Auch folgende Lösung hat noch viel Optimierungsbedarf, aber als Schnellschuss ist diese alle Male besser als das Original
Delphi-Quellcode:
function ConvertCharacters(aString, FromStr, ToStr: AnsiString): AnsiString;
var
I: Integer;
begin
// check whether string are equal
if FromStr = ToStr then
begin
Result := aString;
Exit;
end;
Result := '';
// find fromstr
I := Pos(FromStr, aString);
while I > 0 do
begin
// copy all characters prior fromstr
if I > 1 then
Result := Result + Copy(aString, 1, I - 1);
// append tostr
Result := Result + ToStr;
// delete all until after fromstr
Delete(aString, 1, I + Length(FromStr) - 1);
// find next fromstr
I := Pos(FromStr, aString);
end;
Result := Result + aString;
end;
...
...