Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
Turbo Delphi für Win32
|
Re: StringReplace und seine Tücken
7. Dez 2005, 11:18
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.
Günter Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
|
|
Zitat
|