Thread Suchen / Ersetzen
(25 answers)
Opened by NewtonZ4 at 2010-09-18 19:15
Hier etwas Code.
Aber vorsicht, sämtliche XML-Tags und formatierungen werden ignoriert, das bedeutet, dass nicht alles gefunden werden könnte und eventuell das XML Zerstört wird. 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 #!/usr/bin/perl use strict; use warnings; my $name_file='names.txt'; my $data_file='data.xml'; my $outp_file='data.out.xml'; # Einlesen der Namenspaare my %replace; open(my $nfh, '<', $name_file) or die "error open $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 "error open $data_file $!\n"; # Ausgabedatei öffnen open(my $ofh, '>', $outp_file) or die "error open $outp_file $!\n"; while(<$dfh>) { # Zeile durchsuchen und und Ersetzen $_=~s/$search_str/$replace{$1}/g; # Zeile ausgeben print $ofh $_; } close($ofh); close($dfh); besser ist es das XML zu parsen und dann zu ersetzen (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 #!/usr/bin/perl use strict; use warnings; use XML::Twig; my $name_file='names.txt'; my $data_file='data.xml'; my $outp_file='data.out.xml'; my %replace; open(my $nfh, '<', $name_file) or die "error open $name_file $!\n"; while(my $line=<$nfh>) { chomp($line); $replace{$1}=$2 if($line=~/^\s*(.+?)\s*=>\s*(.+?)\s*$/); } close($nfh); my $twig=XML::Twig->new( pretty_print => 'cvs', twig_handlers => { _all_ => sub { $_->set_text($replace{$_->text}) if(exists($replace{$_->text})) } } ); $twig->parsefile($data_file); open(my $ofh, '>', $outp_file) or die "error open $outp_file $!\n"; $twig->print($ofh); close($ofh); names.txt Code: (dl
)
F_100005.DACA.PV => F_100005.PV data.xml Code: (dl
)
1 <ContextItem Type="Trace"> EDIT: Fehler im Code Zeile 23,25 ',' vergessen EDIT2: Fehler im Erstellen des regulären Ausdrucks Zeile 20f EDIT3: Beispiel mit XML::Twig Funktionstüchtig gemacht. Last edited: 2010-09-18 22:53:33 +0200 (CEST) |