Thread Zeichenlimit einrichten
(40 answers)
Opened by andy at 2013-05-03 14:53
Naja, Du hast 3 Schritte, die Du auf jede Zeile der Quelldatei anwenden willst.
Warum also nicht diese 3 Schritte beim ersten Einlesen der Quelldatei erledigen? Die Reihe von Ersetzungen könnte man verkürzen, indem man Alternativen verwendet. Außerdem steckt da noch ein potentieller Fehler drin; die runden Klammern müssen maskiert werden, wenn sie als Zeichen verwendet werden sollen. Empfohlene Dokumentation: http://perldoc.perl.org/perlretut.html http://perldoc.perl.org/perlre.html http://perldoc.perl.org/perlrequick.html Hier mal ein Versuch einer Korrektur und Zusammenfassung. Ohne Gewähr, da ungetestet. Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 #!/usr/bin/perl use warnings; use strict; my $infile = 'Partnerlist_05_13.csv'; my $outfile = 'neu.csv'; open my $INFH, '<', $infile or die "open(ro,$infile): $!\n"; open m< $OUTFH, '>' $outfile or die "open(w,$outfile): $!\n"; while (local $_ = <$INFH>) { # Teil 1 s{Versicherungsmakler}{Vers.-Makler}i; # Reihenfolge der Alternativen ist wichtig s{Versicherung(?:s-?|en|)}{Vers.-}i; # da Gross/klein egal ist (/i), braucht es kein Match für "Unab.." s{unabhängig(?:er?)}{unabh.}i; s{Geschäftsstelle}{GSt.}i; # () als Suchstring muessen maskiert werden! s{\(?haftungsbeschränkt\)?}{}i; # Teil 2 chomp; my @fields = split /;/, $_; for my $field ( @fields ) { if ( length($field) > 30 ) { $field = substr($field, 0, 30 ); } } # $/ wurde durch chomp() entfernt, hier fuegen wir es wieder an $_ = join( ';', @fields ) . $/; # Teil 3 # dort wo "Gmb" oder "Gm" oder "G" als Wort endet, wird es entfernt # kann klappen, muss aber nicht; ein "GmbH & Co KG" verliert auch das letzte "G" !!!! s{(?Gmb|Gm|G)\b}{}g; # daher vielleicht lieber auch vorne auf Wortgrenze pruefen #s{\b(?Gmb|Gm|G)\b}{}g; print OUTFH; } close $INFH; close $OUTFH or die "close($outfile): $!\n"; Last edited: 2013-05-16 11:35:36 +0200 (CEST) meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen! |