AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

StringReplace und seine Tücken

Ein Thema von Catbytes · begonnen am 7. Dez 2005 · letzter Beitrag vom 8. Dez 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#11

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10:06
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!)





Edit: diComm war schneller
Catbytes
  Mit Zitat antworten Zitat
Benutzerbild von Daniel Schuhmann
Daniel Schuhmann

Registriert seit: 16. Jul 2005
Ort: München
391 Beiträge
 
Turbo Delphi für Win32
 
#12

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10:08
Muss das ; überhaupt ersetzt werden? Das ist doch im normalen Zeichenvorrat drin.
Daniel Schuhmann
  Mit Zitat antworten Zitat
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#13

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10:11
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...
Catbytes
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.340 Beiträge
 
Delphi 11 Alexandria
 
#14

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10:11
@Catbytes:
Ein bisschen mehr Fantasie. Erst das ";" und dann das"#".
Peter
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#15

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10: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.
  Mit Zitat antworten Zitat
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#16

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10:19
Zitat von Jasocul:
@Catbytes:
Ein bisschen mehr Fantasie. Erst das ";" und dann das"#".
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.



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


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

Noch andere Ideen?
Catbytes
  Mit Zitat antworten Zitat
Benutzerbild von Catbytes
Catbytes

Registriert seit: 7. Sep 2002
Ort: Heckendalheim
353 Beiträge
 
Delphi XE5 Enterprise
 
#17

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10:22
Zitat von GuenterS:
Gleichzeitig ist falsch, es wird danach überprüft ob ein ';' vorkommt -->
Das stimmt.


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.ä.).
Catbytes
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#18

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10:23
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.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.340 Beiträge
 
Delphi 11 Alexandria
 
#19

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10:30
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.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von GuenterS
GuenterS

Registriert seit: 3. Mai 2004
Ort: Österreich > Bad Vöslau
760 Beiträge
 
Turbo Delphi für Win32
 
#20

Re: StringReplace und seine Tücken

  Alt 7. Dez 2005, 10:34
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.
Günter
Pünktlichkeit ist die Fähigkeit vorherzusagen um wieviel sich der Andere verspäten wird.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:45 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