![]() |
StringReplace und seine Tücken
Hallo,
benötigt werden 2 Memo-Felder und ein Button. Dazu folgender Code:
Delphi-Quellcode:
^^^Edit: Leerzeichen oben bei den ISO-Codes wegdenken - Der Editor hier übersetzt das als Zeichen!
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; 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 ![]() Hat jemand eine Idee, wie ich dieses rekursive verhalten von StringReplace umgehen kann? |
Re: StringReplace und seine Tücken
Zitat:
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]) ;
|
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. |
Re: StringReplace und seine Tücken
Zitat:
Zitat:
Aber auch ein:
Delphi-Quellcode:
(^^^^Leerzeichen bei den ISO-Codes wegdenken!)
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]) ; ändert daran nichts - es wird "falsch" übersetzt. |
Re: StringReplace und seine Tücken
Zitat:
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. |
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:
Ich weiß, der Satz ist schwachsinnig, aber dadurch kommen ein paar Umlaute vor...
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; 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). |
Re: StringReplace und seine Tücken
Zitat:
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:
|
Re: StringReplace und seine Tücken
Zitat:
@ 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... |
Re: StringReplace und seine Tücken
Ersetze zuerst das "#" und das ";". Danach machst du den Rest.
|
Re: StringReplace und seine Tücken
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:57 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-2025 by Thomas Breitkreuz