Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#3

AW: StringReplace in TStringList

  Alt 21. Jul 2010, 10:10
Gäbe es einen schnelleren Weg?
Alle Items/Zeilen einzeln verarbeiten?
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:
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;
(Achtung, das Overload ist wichtig, ansonsten die Prozedur einfach anders benennen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (21. Jul 2010 um 10:14 Uhr)
  Mit Zitat antworten Zitat