![]() |
Ersetzen von Umlauten bei groß geschriebenen Wörtern
Ich suche nach dem richtigen Ansatz für das folgende Problem. Ich habe einen Text, in dem bewusst einige Wörter in Großbuchstaben geschrieben werden. Nun müssen die Umlaute aus dem Text ersetzt werden. Dafür verwende ich die angegebene Funktion.
In Österreich wird kein SÜßHOLZ hergestellt.
Code:
In Oesterreich wird kein SUessHOLZ hergestellt.
function OhneUmlaute(_string: String): String;
begin _string := ansiReplaceStr(_string, 'ä', 'ae'); _string := ansiReplaceStr(_string, 'ü', 'ue'); _string := ansiReplaceStr(_string, 'ö', 'oe'); _string := ansiReplaceStr(_string, 'Ä', 'Ae'); _string := ansiReplaceStr(_string, 'Ü', 'Ue'); _string := ansiReplaceStr(_string, 'Ö', 'Oe'); _string := ansiReplaceStr(_string, 'ß', 'ss'); Result := _string; end; Gewünscht wird allerdings der folgende Text In Oesterreich wird kein SUESSHOLZ hergestellt. Mein erster Ansatz wäre, den Text von vorne nach hinten durchzugehen und für Ä,Ü,Ö,ß zu prüfen ob das Zeichen davor Groß ist, dann ersetze zu AE,UE,OE,SS. Ist der Buchstabe davor nicht vorhanden oder ist es kein Buchstabe dann prüfe den Buchstaben danach und ersetzte entsprechend. Hat da jemand einen besseren Ansatz? Vielleicht mit regulären Ausdrücken? Gibt es da schon was? |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Unter welcher Bedingung soll das Wort kapital dargestellt werden?
|
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Es gibt keine Bedingung für die kapital geschrieben Wörter. Der Ausgangstext gibt die Bedingung implizit mit. So kann der Ausgangstext auch so heißen:
In ÖSTERREICH wird kein Süßholz hergestellt. und müsste in In OESTERREICH wird kein Sueßholz hergestellt. umgewandelt werden. |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
|
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Dann muß man also das Wort vorher extrahieren und prüfen ob es kapital ist (
Delphi-Quellcode:
)
if Wort = AnsiUpperCase(Wort) then
und dann eine entsprechende Ersetzungsfunktion benutzen. Oder ganz einfach: Wenn Großbuchstabe nicht am Wortanfang steht oder wenn er direkt oder indirekt (wegen ß, was es aktuell nicht in Groß gibt) von einem Großbuchstaben gefolgt wird, dann bleibt er groß. Für RegEx lassen sich solche einfachen Regeln leicht mittels Look-Ahead- und Look-Behind-Befehlen ( ![]() ![]() ![]() ![]() |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
![]() ![]() Und nochmal zur Erinnerung ä<>ae,ü<>ue.... In Gegenden in denen noch Niederdeutsch gesprochen wird, sind z.B. Ortsnahmen oder Familiennamen mit oe gang und gäbe, und das wird dann o: oder u: gesprochen und nicht ö ! Seit wann gibt es eigentlich ASCIIextended oder ANSIextended, ganz zu schweigen von UTF-8 oder Unicode, daß immer noch diese unsäglichen ae,oe und vor allem ss-Krücken genutzt werden. Das ß ist ein eSZett und kein DoppelS. Wenn schon "daß" ersetzt werden soll, dann durch "dasz" und nicht "dass". Gruß K-H |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
Bei Wörtern mit zwei Buchstaben, wird die Prüfung nicht funktionieren. Aber auf Anhieb fällt mir kein Beispiel dazu ein. |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
"aktuell nicht" :zwinker:
Vielleicht schafft das große ß es ja im nächsten Jahrtausend in die "offizielle" deutsche Sprache. :stupid: Zitat:
|
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
Öl in das Feuer zu gießen, ist KEINE gute Idee. |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
Oder habe ich das jetzt alles falsch verstanden? ;) |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Mist :oops:
ÄHhhhhhhhhh |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
Es folgt ein kleines "l", also "Oe". "NÖ, das will ich nicht." ist ein Problem. EDIT: Obwohl das eigentlich auch klar ist. Selbst groß, der Buchstabe davor groß, also OE Meiner Meinung nach geht das nur nicht mit einem zweibuchstabigen Wort, das mit "ß" endet. |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
Gruß K-H P.S. Warum sollte man die Kodierung für das große SZ nicht trotzdem nutzen? |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
|
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Ich kenn nur scharfe Peperoni.
|
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
Es muss ja nicht entschieden werden, ob das Ö in oe oder Oe ungewandelt werden soll. |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Danke Jasocul für den Tipp. Aber auch NÖ dürfte kein Problem darstellen. Wenn es keinen Folgebuchstaben gibt und der Buchstabe davor auch noch groß ist, dann bleibt alles groß.
NÖ wird NOE Nö wird Noe Bei einem ß schließe ich für mich zwei Sachen aus: 1. Das die wenigen Worte mit ß und 2 Buchstaben nicht relevant sind. Mein Kollege aß gestern eine Pizza. 2. Das niemand es schafft ein großes ß einzugeben. Danke an himitsu für die interessanten Links. Vielen Dank für die schnellen Antworten |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
![]() Gruß K-H |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
|
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Meine Implementierung ohne Gewehr.
Code:
function UpperLowerReplaceString(aText, aFromText, aToUpperText, aToLowerText: String): String;
function IsLowerCaseChar(c: Char): Boolean; const cLowerCharacters = 'abcdefghijklmnopqrstuvwxyzäöü'; begin Result := (Pos(c, cLowerCharacters) > 0); end; function IsUpperCaseChar(c: Char): Boolean; const cUpperCharacters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ'; begin Result := (Pos(c, cUpperCharacters) > 0); end; var Pos: Integer; Upper: Boolean; weiter: Boolean; begin Pos := 1; while Pos <> 0 do begin Pos := PosEx(aFromText, aText, Pos); weiter := True; Upper := False; if (Pos <> 0) then begin if weiter and (Pos < length(aText)) and IsLowerCaseChar(aText[Pos + 1]) then begin //kleiner Buchstabe nach dem Umlaut Upper := False; weiter := False; end; if weiter and (Pos < length(aText)) and IsUpperCaseChar(aText[Pos + 1]) then begin //großer Buchstabe nach dem Umlaut Upper := True; weiter := False; end; if weiter and (Pos > 1) and IsUpperCaseChar(aText[Pos - 1]) then begin //großer Buchstabe vor dem Umlaut / ß Upper := True; weiter := False; end; Delete(aText, Pos, 1); if Upper then Insert(aToUpperText, aText, Pos) else Insert(aToLowerText, aText, Pos); end; end; Result := aText; end; function OhneUmlaute(_string: String): String; begin _string := ansiReplaceStr(_string, 'ä', 'ae'); _string := ansiReplaceStr(_string, 'ü', 'ue'); _string := ansiReplaceStr(_string, 'ö', 'oe'); // Wichtig ist an dieser Stelle, dass ß zuerst ersetzt wird, _string := UpperLowerReplaceString(_string, 'ß', 'SS', 'ss'); _string := UpperLowerReplaceString(_string, 'Ä', 'AE', 'Ae'); _string := UpperLowerReplaceString(_string, 'Ü', 'UE', 'Ue'); _string := UpperLowerReplaceString(_string, 'Ö', 'OE', 'Oe'); Result := _string; end; |
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Zitat:
|
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
nÖ wird dann nOe :angel:
|
AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern
Noe ist ein Nachname und "ohne Gewehr" ist Frieden.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:24 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