Kommentare
Transcrição
Kommentare
Musterlösung 4 14.11.2003 Namensliste 2 Lesen Sie die Namensliste von Übung 3 ein. Geben Sie die Namen so aus, dass am Zeilenbeginn die Zeilennummer steht, dann der Vorname, gefolgt vom Nachnamen. Versuchen Sie alle Namensvarianten zu erfassen, z.B. auch mehrteilige Namen und Doppelnamen. Namensvarianten: einfache Namen: s/ ( w+), ( w+)/$2 $1/; ALBRECHT, Angelika ALENCAR, Leonel Umlaute : use locale; BRÜNING, Ulrike Mehrteilige Vornamen: s/ ( w+), ([ w - .]+)/$2 $1/; BECK, Hans-Rainer HANY BABU, M.T. KAISER, Georg A. HAUBOLD, Anne-Marie Friederike Problem: unsaubere Formatierung KLEINMANN, Achim, s/ ( w+), ([ w - .]+),?/$2 $1/; teilweise Leerstelle hinter Vornamen Vorverarbeitung mit s/ s*$//g; Mehrteilige Nachnamen: s/ (.+), ([ w - .]+),?/$2 $1/; COUPER-KUHLEN, Elizabeth DI LUZIO, Aldo Formatieren Sie alle Namen so, dass nur der jeweils erste Buchstabe des Wortes großgeschrieben wird (bei Doppelnamen mit Bindestrich jeder Namensteil). Leerzeilen sollen in der Ausgabe ignoriert werden. einfache Nachnamen: s/ (.+), ([ w - .]+),?/$2 L u$1/; Mehrteilige Nachnamen spezieller Fall vor Normalfall abtesten s/ ([ -,]+)([ -])(.+), ([ w - .]+),?/$4 L u$1$2 L u$3/; s/ (.+), ([ w -.]+),?/$2 L u$1/; Problem: Fehlermeldung bei wiederholter Anwendung von L u Skopus mit E begrenzen s/ ([ -,]+)([ -])(.+), ([ w - .]+),?/$4 L u$1 E$2 L u$3/; Beispielprogramm: #! /usr/local/bin/perl -w use locale; # erweitert \w auf Umlaute $zaehler = 0; while ($in=<>) { chomp($in); # Zaehler initialisieren # zeilenweises Einlesen # Newline loeschen if ($in !~ /^\s*$/){ # Leerzeilen ignorieren $zaehler++; # Zaehler erhoehen $in =~ s/\s*$//; # schneidet ungewollte Leerzeichen am Zeilenende ab # Spezieller Fall: # Suche, Umstellung und Neuformatierung bei mehrteiligem Nachnamen $in =~ s/^([^ \-,]+)([ -])(.+), ([\w\- .]+),?/$4 \L\u$1\E$2\L\u$3/; # Normalfall: # Suche, Umstellung und Neuformatierung bei einfachen Nachnamen $in =~ s/^(.+), ([\w\- .]+),?/$2 \L\u$1/; # Ausgabe: print "$zaehler. $in\n"; } } Perl, Zinsmeister 2 Lösung 4 Kleiner Zusatz: printf "%2d",$zaehler; print ". $in\n"; # pretty print Ausgabe: 1. Angelika Albrecht 2. Leonel Alencar 3. Ramin Assadollahi 4. Markus Bader 5. Dagmar Baumann 6. Josef Bayer 7. Hans-Rainer Beck 8. Wolfgang Benkewitz 9. Ellen Brandner 10. Walter Breu 11. Ulrike Brüning 12. Miriam Butt 13. Domanica Catino Perl, Zinsmeister 3 Lösung 4