Hans: Textdatei: Groß-/Kleinschreibung von Umlauten ändern

Beitrag lesen

Hi,

ich stehe vor dem Problem, dass ich eine Textdatei zeilenweise einlesen und mit einer Eingabe vergleichen muss und Groß-/Kleinschreibung nicht berücksichtigt werden soll.

Da use locale und /i bei Strato scheinbar nicht funktionieren, muss ich wohl leider einen anderen Weg finden. Ich hab' dafür jetzt einfach lc() verwendet. Bekanntermaßen ändert das aber nichts an den Umlauten.

Meine Frage ist nun, wie ich die Umlaute umgewandelt bekomme. Es handelt sich um eine stinknormale Windows Textdatei, wie man sie z.B. mit Notepad erstellt. Welcher Zeichensatz liegt dem zu Grunde? Am tollsten wäre es natüerlich für mich, wenn use locale und /i funktionieren würden, dann könnte ich mir die ganze Umwandlung in Kleinschreibung sparen.

Im Moment wende ich lc() auf den request-string an, d.h. lc($request) und ich würde gerne die Umlaute durch eine Zeichenklasse ersetzen, also etwas in der Form (wobei ich in der Zeichenklasse gerne alle Umlaute hätte - groß und klein geschrieben):
$request =~ s/%c3%84/[chr(hex(c384))chr(hex(c3a4))]/eg;
Funktioniert aber leider nicht. Ich hätte gerne eine Zeichenklasse, weil ich dann auf die einzelnen Zeilen $zeile der Textdatei auch nur lc($zeile) anwenden müsste und die evtl. vorkommenden Umlaute außer Acht lassen könnte, weil sie durch die Zeichenklasse und den Ausdruck   if($zeile =~ /$request/) gematcht werden würde.

Also grober Aufbau:
$request = lc($request);   //Beispiel: ändeRUNG --> änderung
$request =~ s/%c3%84/[chr(hex(c384))chr(hex(c3a4))......]/eg; //[äÄöÖüÜ]nderung
$zeile = lc($zeile); //in der Textdatei gibt es eine Zeile, in der Änderung steht --> Änderung (bleibt gleich)
if($zeile =~ /$request/) //sollte dann matchen

Vermutlich ist das alles viel zu kompliziert. Bin für jeden Tip dankbar, mache jetzt schon eine ganze Weile daran rum.

Gruß,