AGB  ·  Datenschutz  ·  Impressum  







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

Text nach Umlauten parsen, knifflig?

Ein Thema von Gambit · begonnen am 8. Apr 2004 · letzter Beitrag vom 9. Apr 2004
Antwort Antwort
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#1

Text nach Umlauten parsen, knifflig?

  Alt 8. Apr 2004, 19:59
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
  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Text nach Umlauten parsen, knifflig?

  Alt 8. Apr 2004, 20:06
Hi!

Warum geht nicht folgendes:

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

Ciao fkerber
Frederic Kerber
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#3

Re: Text nach Umlauten parsen, knifflig?

  Alt 9. Apr 2004, 00:00
Das löst mein Problem mit den Mischformen doch aber nicht, oder?

Gruß

Gambit
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Text nach Umlauten parsen, knifflig?

  Alt 9. Apr 2004, 01:10
Moin Gambit,

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.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#5

Re: Text nach Umlauten parsen, knifflig?

  Alt 9. Apr 2004, 08:21
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
  Mit Zitat antworten Zitat
Alter Mann

Registriert seit: 15. Nov 2003
Ort: Berlin
934 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Text nach Umlauten parsen, knifflig?

  Alt 9. Apr 2004, 08:35
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
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#7

Re: Text nach Umlauten parsen, knifflig?

  Alt 9. Apr 2004, 10:10
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
  Mit Zitat antworten Zitat
Antwort Antwort


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:28 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