Thread Suchen / Ersetzen
(25 answers)
Opened by NewtonZ4 at 2010-09-18 19:15
So, es funktioniert schon mal grundsätzlich. Super!
Jetzt folgt das feintuning ;-) Ich habe noch eingefügt, daß die alte Datei in .old umbenannt wird und die neue Datei den Namen der alten bekommt. Als nächstes möchte ich über eine weitere .txt Datei Verzeichnispfade einlesen. In der Datei stehen Pfade zu Ordnern in der die Dateien jeweils bearbeitet, gespeichert und umbenannt werden. Die Datei path.txt und names.txt liegen in einem Ordner. Die Dateien data.xml, data.out.xml und data.old.xml liegen in Verzeichnissen die in der Datei path.txt hinterlegt sind Und das bekomme ich nicht hin. 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 #!/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'; my $data_file='C:\Users\User0815\Desktop\Steinhaus\Perl\data.xml'; my $outp_file='C:\Users\User0815\Desktop\Steinhaus\Perl\data.out.xml'; my $old_file='C:\Users\User0815\Desktop\Steinhaus\Perl\data.old.xml'; # einlesen der Dateipfade open(my $pfh, '<', $path_file) or die "Fehler beim öffnen $path_file $!\n"; my @Dateien = readdir(DIR); foreach(@Dateien) { if($_ =~ /\.txt$/) { open(my $pfh,"$_") or die $!; # 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)!; # daten Datei öffnen open(my $dfh, '<', $data_file) or die "Fehler beim öffnen $data_file $!\n"; # Ausgabedatei öffnen open(my $ofh, '>', $outp_file) or die "Fehler beim öffnen $outp_file $!\n"; while(<$dfh>) { # Zeile durchsuchen und und Ersetzen $_=~s/$search_str/$replace{$1}/g; # Zeile ausgeben print $ofh $_; } close($ofh); close($dfh); # daten Datei umbenennen in old rename($data_file, $old_file) or die "Fehler beim umbenenen Alt-Datei $data_file $!\n"; # outp Datei umbenennen in data.xml rename($outp_file, $data_file) or die "Fehler beim umbenenen ind neue Data-Datei $data_file $!\n"; close $pfh; } } # fertig Meldung print "Fertig.\n"; |