Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi StringReplace und seine Tücken (https://www.delphipraxis.net/58447-stringreplace-und-seine-tuecken.html)

Catbytes 7. Dez 2005 09:28


StringReplace und seine Tücken
 
Hallo,

benötigt werden 2 Memo-Felder und ein Button.

Dazu folgender Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  s: string;
begin
  Memo1.Clear;
  Memo1.Lines.Add('Mustermann GmbH & Co. KG');
  Memo1.Lines.Add('');
  Memo1.Lines.Add('Täler, Wälder; all das ist Natur & schön.');
  Memo2.Clear;
  for i := 0 to (Memo1.Lines.Count - 1) do
  begin
    s := StringReplace(Memo1.Lines[i], '&', '& # 3 8 ;', [rfReplaceAll]);
    s := StringReplace(s, ';', '& # 5 9 ;', [rfReplaceAll]);
    s := StringReplace(s, 'ä', '& # 2 2 8 ;', [rfReplaceAll]);
    Memo2.Lines.Add(s);
  end;
end;
^^^Edit: Leerzeichen oben bei den ISO-Codes wegdenken - Der Editor hier übersetzt das als Zeichen!

Das Problem:
Wenn StringReplace nun auf das &-Zeichen trifft, wird es korrekt übersetzt. Gleichzeitig wird aber auch geprüft, ob das Semikolon ( ; ) vorkommt - das wird ja aber schon mit dem Umsetzen vom &-Zeichen miterzeugt.

Er schreib dann:
Mustermann GmbH & # 3 8 & # 5 9 ; Co. KG (denkt euch die Leerzeichen weg, sonst interpretiert dies der Editor als Sonderzeichen).

Ich wollte diese Tabelle nutzen, um einen ISO-8859-1-Konverter zu basteln, den ich für eine XML-Datei brauche.

Hat jemand eine Idee, wie ich dieses rekursive verhalten von StringReplace umgehen kann?

Jelly 7. Dez 2005 09:33

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Catbytes
Gleichzeitig wird aber auch geprüft, ob das Semikolon ( ; ) vorkommt - das wird ja aber schon mit dem Umsetzen vom &-Zeichen miterzeugt.

Wie miterzeugt :gruebel:

Ich versteh deinen Code nicht, oder viel mehr was der machen SOLL. Du ersetzt ein & durch ein & Was soll das denn werden?[/quote]

Ausserdem, anstatt jede einzelne Zeile deines Memo1 zu durchlaufen, kannst du auch gleich so verfahren:

Delphi-Quellcode:
memo2.lines.text := StringReplace (memo1.lines.text,'&','&',[rfReplaceAll]) ;

Jasocul 7. Dez 2005 09:41

Re: StringReplace und seine Tücken
 
Ich sehe da nix Rekursives.
Du machst erst ein StringReplace, wodurch du ein Semikolon einfügst.
Danach machst du ein weiteres StringReplace, wo du das Semikolon durch etwas anderes ersetzt.

Was erwartest du denn? Dass deine zweite Umwandlung deine erste vernachlässigt?
Nimm doch eine andere Reihenfolge.

Catbytes 7. Dez 2005 09:43

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Jelly
Ich versteh deinen Code nicht, oder viel mehr was der machen SOLL. Du ersetzt ein & durch ein & Was soll das denn werden?

Sorry - habs zu spät gemerkt. Beachte mein Edit. Es soll der ISO-Code erzeugt werden - das hat der Editor gleich als Zeichen übersetzt :?

Zitat:

Zitat von Jelly
Ausserdem, anstatt jede einzelne Zeile deines Memo1 zu durchlaufen, kannst du auch gleich so verfahren:

Delphi-Quellcode:
memo2.lines.text := StringReplace (memo1.lines.text,'&','&',[rfReplaceAll]) ;

Klar - ich muß es aber so machen, weil da noch jede Menge Code dazwischensteht, wo ich Zugriff auf die einzelne Zeile eines Memos brauche.

Aber auch ein:
Delphi-Quellcode:
  memo2.lines.text := StringReplace (memo1.lines.text,'&','& # 3 8 ;',[rfReplaceAll]) ;
  memo2.lines.text := StringReplace (memo2.lines.text,';','& # 5 9 ;',[rfReplaceAll]) ;
  memo2.lines.text := StringReplace (memo2.lines.text,'ä','& # 2 2 8;',[rfReplaceAll]) ;
(^^^^Leerzeichen bei den ISO-Codes wegdenken!)

ändert daran nichts - es wird "falsch" übersetzt.

Catbytes 7. Dez 2005 09:45

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Jasocul
Ich sehe da nix Rekursives.
Du machst erst ein StringReplace, wodurch du ein Semikolon einfügst.
Danach machst du ein weiteres StringReplace, wo du das Semikolon durch etwas anderes ersetzt.

Was erwartest du denn? Dass deine zweite Umwandlung deine erste vernachlässigt?
Nimm doch eine andere Reihenfolge.

Geanu das erwarte ich (von einem Computer) :mrgreen:

Ich bräuchte quasi eine Funktion, wo ich die zu suchenden und zu übersetzenden Tags z.B. als Array angeben kann, damit er mehrere auf einmal sucht und ersetzt.

Daniel Schuhmann 7. Dez 2005 09:46

Re: StringReplace und seine Tücken
 
Genau, in der richtigen Reihenfolge ist es kein Problem. Wenn Du zuerst das & ersetzt, paßt doch alles.

Delphi-Quellcode:
var
  S: String;
begin
  S := 'Hallöchen ältere Leute & Übrige Leser mit schönen Büchern';
  S := StringReplace(S, '&', '"', [rfReplaceAll]);
  S := StringReplace(S, 'ä', 'ä', [rfReplaceAll]);
  S := StringReplace(S, 'ö', 'ö', [rfReplaceAll]);
  S := StringReplace(S, 'ü', 'ü', [rfReplaceAll]);
  S := StringReplace(S, 'Ä', 'Ä', [rfReplaceAll]);
  S := StringReplace(S, 'Ö', 'Ö', [rfReplaceAll]);
  S := StringReplace(S, 'Ü', 'Ü', [rfReplaceAll]);
  ShowMessage(S);
end;
Ich weiß, der Satz ist schwachsinnig, aber dadurch kommen ein paar Umlaute vor...

Problematisch ist es, wenn Du den geänderten Text durch ShowMessage anzeigen läßt, hier scheinen die &-Zeichen verschwunden zu sein (in Wirklichkeit werden sie nur nicht angezeigt, weil sie zur Kodierung der unterstrichenen Buchstaben verwendet werden).

Catbytes 7. Dez 2005 09:53

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Daniel Schuhmann
Genau, in der richtigen Reihenfolge ist es kein Problem. Wenn Du zuerst das & ersetzt, paßt doch alles.

Genau das mache ich doch - oben im Quellcode beginne ich ja mit dem &-Zeichen ;)

Aber auch da habe ich schon rumgebastelt und Dinge getauscht - mit dem Ergebnis, daß es dann an anderen Stellen "falsch" ist.

Ich will mir gar nicht vorstellen, was passiert, wenn ich noch das #-Zeichen übersetzen möchte... :?

Zitat:

Zitat von Daniel Schuhmann
Problematisch ist es, wenn Du den geänderten Text durch ShowMessage anzeigen läßt, hier scheinen die &-Zeichen verschwunden zu sein (in Wirklichkeit werden sie nur nicht angezeigt, weil sie zur Kodierung der unterstrichenen Buchstaben verwendet werden).

Das wäre nicht mein Problem, weil die XML-Datei später bei einem Kunden eingelesen wird - wie der sein System konfiguriert hat (SAP-EPB) ist nicht mein Bier.

diComm 7. Dez 2005 09:54

Re: StringReplace und seine Tücken
 
Zitat:

Genau, in der richtigen Reihenfolge ist es kein Problem. Wenn Du zuerst das & ersetzt, paßt doch alles.
Naja, wohl nicht ganz, denn du hast das ";" vergessen, das er auch noch ersetzen will.

@ Catbytes
Du könntest zuerst das ; ersetzen und dann in einem IF zuerst prüfen, ob auf das & ein # folgt bevor du das & ersetzt. vielleicht etwas aufwändig, aber so könnte es gehen...

Jasocul 7. Dez 2005 09:56

Re: StringReplace und seine Tücken
 
Ersetze zuerst das "#" und das ";". Danach machst du den Rest.

diComm 7. Dez 2005 10:01

Re: StringReplace und seine Tücken
 
Zitat:

Ersetze zuerst das "#" und das ";". Danach machst du den Rest.
wenn er zuerst das ; durch "& # 5 9;" ersetzt und anschlissend noch das & durch "& # 3 8;" wird auch das nicht klappen, das gibt dann ""& # 3 8; # 5 9; "

Catbytes 7. Dez 2005 10:06

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Jasocul
Ersetze zuerst das "#" und das ";". Danach machst du den Rest.

Okay...

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  s: string;
begin
  Memo1.Clear;
  Memo1.Lines.Add('Mustermann GmbH & Co. KG');
  Memo1.Lines.Add('');
  Memo1.Lines.Add('Täler, Wälder; all das # ist Natur & schön.');
  Memo2.Clear;
  for i := 0 to (Memo1.Lines.Count - 1) do
  begin
    s := StringReplace(Memo1.Lines[i], '#', '& # 3 5 ;', [rfReplaceAll]);
    s := StringReplace(s, ';', '& # 5 9 ;', [rfReplaceAll]);
    s := StringReplace(s, '&', '& # 3 8 ;', [rfReplaceAll]);
    s := StringReplace(s, 'ä', '& # 2 2 8 ;', [rfReplaceAll]);
    Memo2.Lines.Add(s);
  end;
end;
(^^^^Leerzeichen bei den ISO-Codes wegdenken!)

Ergibt:

Mustermann GmbH & # 3 8 ; Co. KG

T& # 2 2 8 ;ler, W& # 2 2 8 ;lder& # 3 8 ; # 5 9 ; all das & # 3 8 ; # 3 5 & # 3 8 ; # 5 9 ; ist Natur & # 3 8 ; schön.

(^^^^Leerzeichen bei den ISO-Codes wegdenken!)


:cry:


Edit: diComm war schneller :P

Daniel Schuhmann 7. Dez 2005 10:08

Re: StringReplace und seine Tücken
 
Muss das ; überhaupt ersetzt werden? Das ist doch im normalen Zeichenvorrat drin.

Catbytes 7. Dez 2005 10:11

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Daniel Schuhmann
Muss das ; überhaupt ersetzt werden? Das ist doch im normalen Zeichenvorrat drin.

Leider ja - Kunde besteht auf vollständige ISO-Konvertierung...

Jasocul 7. Dez 2005 10:11

Re: StringReplace und seine Tücken
 
@Catbytes:
Ein bisschen mehr Fantasie. Erst das ";" und dann das"#". :zwinker:

GuenterS 7. Dez 2005 10:18

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Catbytes
Hallo,

benötigt werden 2 Memo-Felder und ein Button.

Dazu folgender Code:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  s: string;
begin
  Memo1.Clear;
  Memo1.Lines.Add('Mustermann GmbH & Co. KG');
  Memo1.Lines.Add('');
  Memo1.Lines.Add('Täler, Wälder; all das ist Natur & schön.');
  Memo2.Clear;
  for i := 0 to (Memo1.Lines.Count - 1) do
  begin
    s := StringReplace(Memo1.Lines[i], '&', '& # 3 8 ;', [rfReplaceAll]);
    s := StringReplace(s, ';', '& # 5 9 ;', [rfReplaceAll]);
    s := StringReplace(s, 'ä', '& # 2 2 8 ;', [rfReplaceAll]);
    Memo2.Lines.Add(s);
  end;
end;
^^^Edit: Leerzeichen oben bei den ISO-Codes wegdenken - Der Editor hier übersetzt das als Zeichen!

Das Problem:
Wenn StringReplace nun auf das &-Zeichen trifft, wird es korrekt übersetzt. Gleichzeitig wird aber auch geprüft, ob das Semikolon ( ; ) vorkommt - das wird ja aber schon mit dem Umsetzen vom &-Zeichen miterzeugt.

Er schreib dann:
Mustermann GmbH & # 3 8 & # 5 9 ; Co. KG (denkt euch die Leerzeichen weg, sonst interpretiert dies der Editor als Sonderzeichen).

Ich wollte diese Tabelle nutzen, um einen ISO-8859-1-Konverter zu basteln, den ich für eine XML-Datei brauche.

Hat jemand eine Idee, wie ich dieses rekursive verhalten von StringReplace umgehen kann?

Gleichzeitig ist falsch, es wird danach überprüft ob ein ';' vorkommt --> Das was es liefert ist korrekt, es liegt nur an Deiner Implementierung.

Catbytes 7. Dez 2005 10:19

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Jasocul
@Catbytes:
Ein bisschen mehr Fantasie. Erst das ";" und dann das"#". :zwinker:

Okay:

Delphi-Quellcode:
    s := StringReplace(Memo1.Lines[i], ';', ';', [rfReplaceAll]);
    s := StringReplace(s, '#', '#', [rfReplaceAll]);
    s := StringReplace(s, '&', '&', [rfReplaceAll]);
    s := StringReplace(s, 'ä', 'ä', [rfReplaceAll]);
Ergibt:

Mustermann GmbH & # 3 8 ; Co. KG

T& # 2 2 8 ;ler, W& # 2 2 8 ;lder& # 3 8 ; & # 3 8 ; # 3 5 ; 5 9; all das & # 3 8 ; # 3 5; ist Natur & # 3 8 ; schön.

:cry:

Zitat:

Zitat von Jasocul
Man muss die Ursache beheben und nicht die Symptome.

:-D

Trotzdem danke für die Tipps. Egal wie ich es drehe und wende: eine Sache wird immer "falsch" ersetzt.

Noch andere Ideen?

Catbytes 7. Dez 2005 10:22

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von GuenterS
Gleichzeitig ist falsch, es wird danach überprüft ob ein ';' vorkommt -->

Das stimmt.


Zitat:

Zitat von GuenterS
Das was es liefert ist korrekt, es liegt nur an Deiner Implementierung.

Deshalb habe ich das Wort "falsch" immer in Anführungszeichen geschrieben. Delphi macht schon was ich ihm sage, aber für mein Problem ist es entweder nicht der richtige Befehl, oder ich muß einen anderen Ansatz wählen. Hast du eine Idee für eine "richtige Implementierung"? Ich nutze auch gerne Befehle außerhalb der Delphi-Sprache (JCL o.ä.).

GuenterS 7. Dez 2005 10:23

Re: StringReplace und seine Tücken
 
Aber etwas zu Deinem Problem ...

Was hindert dich daran eine zweite Stringlist zu verwenden, wo Du das konvertierte reinschreibst?

Ich stell mir das so vor:

Du gehst Dein Memo zeichen für Zeichen durch und schreibst das konvertierte in die neue Stringlist, dann ist es ziemlich egal, welche Reihenfolge du verwendest.

Jasocul 7. Dez 2005 10:30

Re: StringReplace und seine Tücken
 
Mist. Habe "&" nicht bedacht.
Ich denke der Weg von GuenterS ist die sinnvollste Möglichkeit, falls es nicht noch ein spezielle Konvertierungsfunktion dafür gibt.

GuenterS 7. Dez 2005 10:34

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Jasocul
Mist. Habe "&" nicht bedacht.
Ich denke der Weg von GuenterS ist die sinnvollste Möglichkeit, falls es nicht noch ein spezielle Konvertierungsfunktion dafür gibt.

Man könnte natürlich auch das gleiche Memo verwenden und dieses Zeichenweise durchgehen. Trifft man auf etwas zu konvertierendes, ersetzt man dieses Zeichens durch den Code und setzt die Position für das nächste zu prüfende Zeichen auf die Stelle nach dem eingefügten. Dann ist auch wieder die Reihenfolge egal. Zudem würden Ressourcen gespart.

Catbytes 7. Dez 2005 10:55

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von GuenterS
Ich stell mir das so vor:

Du gehst Dein Memo zeichen für Zeichen durch und schreibst das konvertierte in die neue Stringlist, dann ist es ziemlich egal, welche Reihenfolge du verwendest.

Hmmmmm - an die Möglichkeit habe ich noch gar nicht gedacht.

Delphi-Quellcode:
function GetISO8859_1(s: string): string;
var
  i: Integer;
  sNew: string;
begin
  sNew := '';
  for i := 1 to Length(s) do
  begin
    case s[i] of
      ';': sNew := sNew + '& # 5 9 ;';
      '#': sNew := sNew + '& # 3 5 ;';
      '&': sNew := sNew + '& # 3 8 ;';
      'ä': sNew := sNew + '& # 2 2 8 ;';
      // Hier folgen weitere ISO-Codes...
    else
      sNew := sNew + s[i];
    end;
  end;
  Result := sNew;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  Memo1.Clear;
  Memo1.Lines.Add('Mustermann GmbH & Co. KG');
  Memo1.Lines.Add('');
  Memo1.Lines.Add('Täler, Wälder; all das # ist Natur & schön.');
  Memo2.Clear;
  for i := 0 to (Memo1.Lines.Count - 1) do
  begin
    Memo2.Lines.Add(GetISO8859_1(Memo1.Lines[i]));
  end;
end;
Ergibt:

Mustermann GmbH & # 3 8 ; Co. KG

T& # 2 2 8 ;ler, W& # 2 2 8 ;lder& # 5 9 ; all das & # 3 5 ; ist Natur & # 3 8 ; schön.

:thumb: :-D

Danke euch allen...

Werde die komplette Function dann hier noch posten, wenn ich alles abgeschrieben habe.

Entdeckt noch jemand einen (logischen) Fehler oben im Code? Kann man an irgend einer Stelle Code einsparen oder verbessern?

GuenterS 7. Dez 2005 10:57

Re: StringReplace und seine Tücken
 
Es gibt einen "Fehler" ... Du wirst im Memo2 nur 1 Zeichen bzw. den Code für das Konvertierte Zeichen in einer Zeile haben.

Catbytes 7. Dez 2005 11:01

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von GuenterS
Es gibt einen "Fehler" ... Du wirst im Memo2 nur 1 Zeichen bzw. den Code für das Konvertierte Zeichen in einer Zeile haben.

:gruebel: Den Satz verstehe ich nicht.

In Memo2 kam genau das gleiche raus, wie in Memo1 - nur eben übersetzt. Mit Umbrüchen und allem...

Was genau meinst Du?

GuenterS 7. Dez 2005 11:04

Re: StringReplace und seine Tücken
 
Die Lines Property vom Memo ist ja eigentlich auch nur ein TStrings Typ. Wenn Du da für jedes Zeichen Add aufrufst hast Du es nachher nicht mehr so drinnen wie du es im Ursprünglichen Memo hast, auch wenn es ein Memo vielleicht anders darstellt.


versuch doch mal nach der Konvertiertung den Inhalt von Memo2 zeilenweise in eine Datei zu schreiben, dann dürftest Du schön sehen was ich meine.

Catbytes 7. Dez 2005 11:11

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von GuenterS
Die Lines Property vom Memo ist ja eigentlich auch nur ein TStrings Typ. Wenn Du da für jedes Zeichen Add aufrufst hast Du es nachher nicht mehr so drinnen wie du es im Ursprünglichen Memo hast, auch wenn es ein Memo vielleicht anders darstellt.


versuch doch mal nach der Konvertiertung den Inhalt von Memo2 zeilenweise in eine Datei zu schreiben, dann dürftest Du schön sehen was ich meine.

Hmmmmm - ich setze doch das Add nicht für jedes Zeichen, sondern für jede Zeile.

Habe es mal spaßhalber per SaveDialog und Memo2.Lines.SavetoFile gespeichert. Alles sauber...

Wenn ich es jetzt immer noch nicht verstanden habe :gruebel:

Hättest du zwei oder drei Zeilen Code für mich, was genau Du meinst?

GuenterS 7. Dez 2005 11:13

Re: StringReplace und seine Tücken
 
Ich zieh meinen Kommentar zurück, hab mich verschaut. Dachte gesehen zu haben, dass du es zeichenweise in die Konvertierungsroutine schickst... :duck:

Catbytes 7. Dez 2005 11:16

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von GuenterS
Ich zieh meinen Kommentar zurück, hab mich verschaut. Dachte gesehen zu haben, dass du es zeichenweise in die Konvertierungsroutine schickst... :duck:

Okay :???:

Danke Dir trotzdem für die Hilfe!

:-D

Brüggendiek 8. Dez 2005 09:28

Re: StringReplace und seine Tücken
 
Hallo Catbytes!

Bei solchen Problemen ist es eine gute Idee, das "kritische" Zeichen (hier '&') bei den Ersetzungen durch ein garantiert nicht im String vorkommendes Zeichen (z.B. #02) zu ersetzen. Dann kommt kein '&' in den Text, das nicht umgesetzt werden muß. Als letzte Aktion ersetzt Du dann das Hilfszeichen durch das '&'.

Ansonsten geht nur der Weg, den Text zeichenweise durchzugehen. Dazu sollte man den String zweimal durchgehen: erst ermittelt und summiert man für jedes Zeichen die Länge im Ergebnis, setzt dann den Ausgabestring auf diese Summe und kopiert zeichenweise das Zeichen bzw. den Ersatzstring.
Bitte nicht den Ergebnisstring durch Verketten erzeugen - die ständige Umkopiererei frißt gewaltig Speicher.

Gruß

Dietmar Brüggendiek

Phistev 8. Dez 2005 10:20

Re: StringReplace und seine Tücken
 
Zitat:

Zitat von Brüggendiek
Hallo Catbytes!

Bei solchen Problemen ist es eine gute Idee, das "kritische" Zeichen (hier '&') bei den Ersetzungen durch ein garantiert nicht im String vorkommendes Zeichen (z.B. #02) zu ersetzen. Dann kommt kein '&' in den Text, das nicht umgesetzt werden muß. Als letzte Aktion ersetzt Du dann das Hilfszeichen durch das '&'.

Ansonsten geht nur der Weg, den Text zeichenweise durchzugehen. Dazu sollte man den String zweimal durchgehen: erst ermittelt und summiert man für jedes Zeichen die Länge im Ergebnis, setzt dann den Ausgabestring auf diese Summe und kopiert zeichenweise das Zeichen bzw. den Ersatzstring.
Bitte nicht den Ergebnisstring durch Verketten erzeugen - die ständige Umkopiererei frißt gewaltig Speicher.

Gruß

Dietmar Brüggendiek

Man kann auch StringReplace verwenden. Am Ende muss man einfach nur
Delphi-Quellcode:
memo2.lines.text := StringReplace(memo1.lines.text,'& # 3 8 & # 5 9 ;','& # 3 8 ;',[rfReplaceAll]);
oder eine (oder mehrere) ähnliche Zeile(n) benutzen, also die falschen Kombinationen wieder ersetzen. (Leerzeichen wie gehabt)

Christian Seehase 8. Dez 2005 11:20

Re: StringReplace und seine Tücken
 
Moin Phistev,

Zitat:

Zitat von Phistev
Man kann auch StringReplace verwenden. Am Ende muss man einfach nur
Delphi-Quellcode:
memo2.lines.text := StringReplace(memo1.lines.text,'& # 3 8 & # 5 9 ;','& # 3 8 ;',[rfReplaceAll]);
oder eine (oder mehrere) ähnliche Zeile(n) benutzen, also die falschen Kombinationen wieder ersetzen. (Leerzeichen wie gehabt)

wobei man allerdings tunlichst darauf verzichten sollte die Eigenschaft Memo1.Lines.Text mehrfach hintereinander zu verwenden.
Besser ist es sie einmal in eine Stringvariable zu übernehmen, dann mit dieser zu arbeiten, und anschliessend wieder in Memo1.Lines.Text zurückzuschreiben (so wie Catbytes dass auch gemacht hat).
Grund:
Beim jedem Lesen der Eigenschaft, wird Text aus den einzelnen Lines zusammengesetzt, beim Schreiben werden die Lines jeweils neu erzeugt.
Das drückt, je nach Textlänge, reichlich auf die Performance.

@Dietmar:
Als Kompromiss für die Errechnung der Buffergrösse, die ja auch Zeit in Anspruch nimmt, könnte man auch einen Schätzwert für die erforderliche Grösse annehmen (Basis wieviele Zeichen müssen durchschnittlich ersetzt werden), und beim Überschreiten dieses Wertes den Buffer um einen festgelegten Wert erhöhen (in der Hoffnung, dass das nicht notwendig sein sollte)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz