AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Ersetzen von Umlauten bei groß geschriebenen Wörtern
Thema durchsuchen
Ansicht
Themen-Optionen

Ersetzen von Umlauten bei groß geschriebenen Wörtern

Ein Thema von Ackerjan · begonnen am 2. Feb 2015 · letzter Beitrag vom 3. Feb 2015
Antwort Antwort
Seite 1 von 3  1 23      
Ackerjan

Registriert seit: 4. Jun 2007
Ort: Potsdam
17 Beiträge
 
Delphi 2009 Enterprise
 
#1

Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 11:24
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:
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;
In Oesterreich wird kein SUessHOLZ hergestellt.

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?
Jan
Niemals aufgeben, niemals kapitulieren! - galaxy quest
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 11:28
Unter welcher Bedingung soll das Wort kapital dargestellt werden?
Markus Kinzler
  Mit Zitat antworten Zitat
Ackerjan

Registriert seit: 4. Jun 2007
Ort: Potsdam
17 Beiträge
 
Delphi 2009 Enterprise
 
#3

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 11:38
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.
Jan
Niemals aufgeben, niemals kapitulieren! - galaxy quest
  Mit Zitat antworten Zitat
Benutzerbild von baumina
baumina

Registriert seit: 5. Mai 2008
Ort: Oberschwaben
1.275 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 11:39
Unter welcher Bedingung soll das Wort kapital dargestellt werden?
Wenn das Wort UpperCase ist, dann soll es wohl auch so bleiben.
Hinter dir gehts abwärts und vor dir steil bergauf ! (Wolfgang Ambros)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#5

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 11:46
Dann muß man also das Wort vorher extrahieren und prüfen ob es kapital ist (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 (Look-Around) umsetzen.


http://www.delphipraxis.net/183730-t...ml#post1288522
http://stackoverflow.com/questions/1...ns-editpad-pro
http://www.regular-expressions.info/replacecase.html
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 2. Feb 2015 um 11:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 12:30
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ß.
Das ist ja nicht so ganz richtig:
http://de.wikipedia.org/wiki/Gro%C3%9Fes_%C3%9F
http://www.fileformat.info/info/unic...1e9e/index.htm

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
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

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

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 12:45
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.
Prüfe den Folgebuchstaben zuerst. Ist der groß geschrieben, dann ist auch der auszutauschende Buchstabe groß zu schreiben. Gibt es keinen Folgebuchstaben, kannst du den vorherigen Buchstaben entsprechend prüfen. Diese Prüfreihenfolge ist sicherer, da Substantive oder Wörter am Satzanfang große Anfangsbuchstaben haben.
Bei Wörtern mit zwei Buchstaben, wird die Prüfung nicht funktionieren. Aber auf Anhieb fällt mir kein Beispiel dazu ein.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#8

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 12:48
"aktuell nicht"

Vielleicht schafft das große ß es ja im nächsten Jahrtausend in die "offizielle" deutsche Sprache.


Zitat:
SO IN UM AN
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#9

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 12:53
Aber auf Anhieb fällt mir kein Beispiel dazu ein.
Öl

Öl in das Feuer zu gießen, ist KEINE gute Idee.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

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

AW: Ersetzen von Umlauten bei groß geschriebenen Wörtern

  Alt 2. Feb 2015, 12:56
Zitat:
SO IN UM AN
Ich sehe da keine Sonderzeichen.
Oder habe ich das jetzt alles falsch verstanden?
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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