Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Text nach Umlauten parsen, knifflig? (https://www.delphipraxis.net/19777-text-nach-umlauten-parsen-knifflig.html)

Gambit 8. Apr 2004 19:59


Text nach Umlauten parsen, knifflig?
 
Moin,

ich habe 2 Datenbanken, eine wo nur Strings hinterlegt sind, die andere wo auch Strings hinterlegt sind allerdings noch andere dazugehörige Informationen.

Nun sind die Umlaute der Strings in der ersten Datenbank normal geschrieben, in der anderen als HTML Code also für "Ä" beispielsweise ä

Das ist allerdings nicht einheitlich der Fall sondern es kann vorkommen, dass manche Umlaute im Klartext stehen andere im HTML Code. Das schlimmste ist aber, dass es auch Mischformen gibt, wie "Cäer kümmerte sich nicht"

Ich möchte aus der ersten Datenbank den String entnehmen, suchen, ob der String in der anderen Datenbank vorhanden ist und die gefundenen Daten in eine neue Datenbank schreiben.

Wenn es keine Mischformen gäbe, würde folgender einfachen Code reichen:
Delphi-Quellcode:
S2:= s;
    If ansiContainsText(s2, 'ä') then
      s2:= ansiReplaceText(s2, 'ä', 'ä');
    If ansiContainsText(s2, 'ü') then
      s2:= ansiReplaceText(s2, 'ü', 'ü');
    If ansiContainsText(s2, 'ö') then
      s2:= ansiReplaceText(s2, 'ö', 'ö');
    If ansiContainsText(s2, 'ß') then
      s2:= ansiReplaceText(s2, 'ß', 'ß');
Wenn ich in der zweiten Datenbank nach s und s2 suchen würde, würden Strings gefunden, die ohne HTML Code vorhanden sind, als auch Strings, wo alle Umlaute durch HTML Code ersetzt sind.

Aber wie finde ich nun die Mischformen??

Gruß

Gambit

fkerber 8. Apr 2004 20:06

Re: Text nach Umlauten parsen, knifflig?
 
Hi!

Warum geht nicht folgendes:

Delphi-Quellcode:
s2:=Stringreplace(s2, 'ß', 'ß', [rfReplaceAll, rfignoreCase]);
Oder hab ich da was falsch verstanden?

Ciao fkerber

Gambit 9. Apr 2004 00:00

Re: Text nach Umlauten parsen, knifflig?
 
Das löst mein Problem mit den Mischformen doch aber nicht, oder?

Gruß

Gambit

Christian Seehase 9. Apr 2004 01:10

Re: Text nach Umlauten parsen, knifflig?
 
Moin Gambit,

Zitat:

Zitat von Gambit
Das löst mein Problem mit den Mischformen doch aber nicht, oder?

ich versteh' Dein Problem mit den Mischformen nicht ganz.

Du kannst doch alle gefundenen Sonderzeichen in ihre HTML Entsprechung überführen, die die HTML-Codes ja wiederum keine Sonderzeichen enthalten.

Gambit 9. Apr 2004 08:21

Re: Text nach Umlauten parsen, knifflig?
 
OK, ich versuchs mal an einem Beispiel deutlich zu machen:

Angenommen in der ersten Datenbank steht der String: "Hägar lügt nie"

Dann könnte es sein, das in der zweiten Datenbank folgender String steht, wenn er denn vorhanden ist:

1. "Häger lügt nie" also kein HTML Code oder
2. "Hägar lügt nie" also nur erstes Soderzeichen ist HTML Code oder
3. "Hägar lügt nie" nur zweites Sonderzeichen ist HTML Code oder
4. "Hägar lügt nie" alle Sonderzeichen sind HTML Code

Wenn ein String 3 Umlaute enthält kann es noch weitaus mehr Möglichkeiten geben. Das es solche Inkonsequenzen in der zweiten Datenbank überhaupt giebt, liegt an dem Programmierer der HTML Seiten auf den ich leider keinen Einfluss habe. Hätte er konsequent alle Sonderzeichen in HTML geschrieben, gäbe es das Problem nicht und ich bräuchte auch keine 2 String-Variabeln in meinem Codebeispiel(s und s2).

Mit meinem oben genannten Code Beispiel(also wenn ich alle Sonderzeichen austauschen würde) würde ich aber nur die erste und die letzte der 4 Möglichkeiten finden. Die Sache, mit zwei Strings(s und s2) ist ja auch nicht besonders pfiffig. Ich bräuchte eine Routine, die in einer Schleife den String so oft wie nötig ändert und immer wieder prüft, ob der String in der zweiten Datenbank vorhanden ist. Außerdem bräuchte die Schleife auch 'ne Abbruchbedingung für den Fall, dass der String gar nicht vorhanden ist.

Ich hoffe, jetzt ist es verständlicher.

Gruß und frohe Ostern

Gambit

Alter Mann 9. Apr 2004 08:35

Re: Text nach Umlauten parsen, knifflig?
 
Hi Gambit,

geht es so:

Delphi-Quellcode:

procedure ReplaceChar(var InOut : String; const UE : Char; const AE : String);
var
  I : Integer;
begin
  while POS(UE, InOut) <> 0 do
  begin
    I := POS(UE, InOut);
    Delete(InOut, I, 1);
    Insert(AE, InOut, I);
  end;
end;

Frohe Ostern

Gambit 9. Apr 2004 10:10

Re: Text nach Umlauten parsen, knifflig?
 
ich hab' wohl etwas zu kompliziert gedacht, ich glaube es geht tatsächlich ganz einfach so wie fkerber es vorgeschlagen hat:

Delphi-Quellcode:
while found = false do
    begin
      If s1=s2 then found:= true else
        begin
          s2:= Stringreplace(s2, '&auml;', 'ä', [rfignoreCase]);
          s2:= Stringreplace(s2, '&uuml;', 'ü', [rfignoreCase]);
          s2:= Stringreplace(s2, '&ouml;', 'ö', [rfignoreCase]);
          s2:= Stringreplace(s2, '&szlig;', 'ß', [rfignoreCase]);
        end;
     end;
Meine ersten Tests sind ganz verheißungsvoll.

Eigentlich ganz einfach.

Danke!

Gambit


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:44 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