![]() |
StringReplace in TStringList
Hi, habe eine weitere Frage bezüglich Performance von einer TStringlist.
Und zwar verwende ich momentan
Code:
zum ersetzen in einer TStringlist, allerdings dauert dies ebenfalls extrem lange, bei 50.000 und weit mehr Einträgen.
sl.Text := StringReplace(sl.Text,'stringOld','stringNew',[rfReplaceAll]);
Gäbe es einen schnelleren Weg? z.B vor dem eintragen in der TStringlist, diesen Wert mit verändern, oder einen besseren algorithmus? |
AW: StringReplace in TStringList
Ich würde in einer Schleife das StringReplace auf jedem Eintrag in der Stringliste machen. Das dürfte wesentlich schneller gehen. :)
|
AW: StringReplace in TStringList
Zitat:
Denn schau mal nach, was .Text intern so alles macht. Aber bei .Lines von z.B. einem Memo ist es anderesrum, da dort der Text zusammenhängend verwaltet wird und der Zugriff auf Einzelstrings daher länger dauert. Aber in TStringList liegt jeder String einzeln im Speicher und daher muß .Text alles zu einem Gesamtstring zusammensetzen und dann wieder zerlegen.
Delphi-Quellcode:
(Achtung, das Overload ist wichtig, ansonsten die Prozedur einfach anders benennen)
procedure StringReplace(SL: TStrings; OldPattern, NewPattern: string;
Flags: TReplaceFlags); overload; var i: Integer; begin if (SL.ClassName = 'TMemoStrings') or (Pos(SL.LineBreak, OldPattern) > 0) or (Pos(#13, NewPattern) > 0) or (Pos(#10, NewPattern) > 0) then SL.Text := StringReplace(SL.Text, OldPattern, NewPattern, Flags) else for i := SL.Count - 1 downto 0 do SL[i] := StringReplace(SL[i], OldPattern, NewPattern, Flags); end; |
AW: StringReplace in TStringList
Danke, ich teste gleich mal die Performance.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:24 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz