perl / Umlaute ersetzen
Hallo! Ein Perl-Skript macht LDAP-Abfragen und schreibt das Ergebnis aufbereitet in Dateien, die später in der bash aufgerufen werden. Ein Attribut (uid) enthält Umlaute. Die werden (soweit ich weiß) in UTF-8 ausgegeben und auch so in die Datei geschrieben. Für die Verarbeitung in der bash darf an dieser Stelle aber kein Umlaut stehen (das Programm, das in der bash aufgerufen wird, kann damit nicht umgehen). Das Attribut uid wird in $du_name gespeichert und enthält z.B. den Wert "SGlückspilz". Das folgende Bsp. (google-Fund) macht es nicht. my %UMLAUTE = ( 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue' ); my @UMLKEYS = join("|", keys(%UMLAUTE)); $du_name =~ s/(@UMLKEYS)/$UMLAUTE{$1}/g; $du_name bleibt wie es ist, mit Umlauten. :( Hans
Moin moin! Am Mittwoch, 18. April 2007 schrieb Hans Moser:
my %UMLAUTE = ( 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue' ); my @UMLKEYS = join("|", keys(%UMLAUTE)); $du_name =~ s/(@UMLKEYS)/$UMLAUTE{$1}/g;
$du_name bleibt wie es ist, mit Umlauten. :(
use warnings; use strict; my $string = 'Glückspilz'; my %UMLAUTE = ( 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue' ); $string =~ s/(ä|Ä|ü|Ü|ö|Ö)/$UMLAUTE{$1}/g; print $string,"\n"; HTH Andre --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hi, Am Mittwoch, 18. April 2007 17:54 schrieb Hans Moser: [...]
Das folgende Bsp. (google-Fund) macht es nicht.
my %UMLAUTE = ( 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue' ); my @UMLKEYS = join("|", keys(%UMLAUTE)); $du_name =~ s/(@UMLKEYS)/$UMLAUTE{$1}/g;
Da ist nur ein kleiner Fehler drin: my %UMLAUTE = ( 'Ä' => 'Ae', 'Ö' => 'Oe', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue' ); my $UMLKEYS = join("|", keys(%UMLAUTE)); $du_name =~ s/($UMLKEYS)/$UMLAUTE{$1}/g; Aus "perldoc -f join": join EXPR,LIST Joins the separate strings of LIST into a single string with fields separated by the value of EXPR, and returns that new string. ... Das Ergebnis eines join in ein Array zu schreiben (@UMLKEYS) ist also Quatsch - das Ergebnis ist ein String. Gruß Jan --------------------------------------------------------------------- To unsubscribe, e-mail: opensuse-programming-de+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-programming-de+help@opensuse.org
Hans Moser schrieb:
Ein Perl-Skript macht LDAP-Abfragen und schreibt das Ergebnis aufbereitet in Dateien, die später in der bash aufgerufen werden.
Ein Attribut (uid) enthält Umlaute. Die werden (soweit ich weiß) in UTF-8 ausgegeben und auch so in die Datei geschrieben. [...] Das folgende Bsp. (google-Fund) macht es nicht. Das Problem lag darin, dass das Skript ursprüglich auf AIX in ISO 8859 erstellt wurde, aus einem tarball unter SLES (UTF-8) ausgepackt und in vi bearbeitet wurde. Dabei war vi so intelligent das Skript immer wieder in ISO 8859 zu konvertieren. Perl hat es natürlich in UTF-8 interpretiert. Daher waren die Umlaute gar keine und die Ersetzung hat nix gefunden. :( (Habe ich erst gesehen, als ich mal mit cat in das Skript geguckt habe.)
Hans
participants (3)
-
Andre Heine
-
Hans Moser
-
Jan Trippler