Thread Suchen / Ersetzen
(25 answers)
Opened by NewtonZ4 at 2010-09-18 19:15
Du sagst mir die Fehlermeldungen und Warnungen nicht.
Überlege dir was du nur einmal zu machen brauchst. Da wäre das Laden der Namensliste und das Erstellen des regulären Ausdrucks. Wie willst du die XML-Datei umbenennen? meine Vorstellung dazu wäre: xyz.xml -> xyz.old.xml foo.xml -> foo.old.xml bar.xml -> bar.old.xml Was willst du mit dem readdir(DIR) dazwischen? Du ließt eine Datei Zeilenweise und nicht aus einem Ordner. Du benutzt rename schau mal in die perldoc perldoc -f rename um die Beschränkungen zu erkennen. Du verwendest $pfh später gar nicht mehr. Benutze immer das open mit drei Parametern, das beugt möglichen Fehler vor. Einrücken hilft bei der Übersicht, gewöhne es dir von direkt an, und halte dich konsequent daran, das macht das spätere lesen und finden von Fehlern einfacher. Ich mache das auch nicht weil ich Leerzeichen so Liebe. :-) Also meine Interpretation deines Codes, 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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 #!/usr/bin/perl use strict; use warnings; my $path_file='C:\Users\User0815\Desktop\Steinhaus\Perl\path.txt'; my $name_file='C:\Users\User0815\Desktop\Steinhaus\Perl\names.txt'; # einlesen der Namenspaare my %replace; open(my $nfh, '<', $name_file) or die "Fehler beim öffnen $name_file $!\n"; while(my $line=<$nfh>) { chomp($line); $replace{$1}=$2 if($line=~/^\s*(.+?)\s*=>\s*(.+?)\s*$/); } close($nfh); # erstellen der Suchliste my $search_str=join('|', map{qr(\Q$_\E)}keys(%replace)); $search_str=qr!($search_str)!; # einlesen der Dateipfade open(my $pfh, '<', $path_file) or die "Fehler beim öffnen $path_file $!\n"; while(my $file=<$pfh>) { # Zeilenumbruch am Ende entfernen chomp($file); # überspringe alle Dateien, die nicht mit ".xml" enden next unless($file =~ /\.xml$/); # Namen für die alte Datei erzeugen (my $old_file=$file)=~s/\.([^.]+)$/.old.$1/; # nach schauen, ob es die Datei "$old_file" schon gibt. if(-f $old_file) { # Warnung ausgeben warn("Datei $old_file existiert, sie wird gelöscht!\n"); # Datei löschen unlink($old_file) or die("konnte $old_file nicht löschen!\n"); } #Datei umbenennen: rename($file, $old_file) or die("Fehler beim Umbenennen von $file nach $old_file $!\n"); # daten Datei öffnen open(my $dfh, '<', $old_file) or die("Fehler beim öffnen $old_file $!\n"); # Ausgabedatei öffnen open(my $ofh, '>', $file) or die("Fehler beim öffnen $file $!\n"); while(<$dfh>) { # Zeile durchsuchen und und Ersetzen $_=~s/$search_str/$replace{$1}/g; # Zeile ausgeben print $ofh $_; } close($ofh); close($dfh); } close($pfh); # fertig Meldung print "Fertig.\n"; |