Thread File::Find - bestimmte Dateien in Verzeichnis finden
(21 answers)
Opened by Henri at 2015-04-22 00:00
Du könntest mit grep die Liste filtern, die glob() liefert und explizit die Datei aus der Liste entfernen, die Du auf der Kommandozeile als erstes angegeben hast.
Ausserdem: Wenn Du in Deiner For-Schleife alle Dateien verarbeiten willst und der aktuell zu verarbeitende Dateiname in $file steht, solltest Du auch $file benutzen und nicht $file1 (Tippfehler passieren ;-) ): Code (perl): (dl
)
1 2 3 4 5 6 7 # vvvvv for my $file (@files) { ... # erstelle $twig1 $twig1->parsefile($file1); # ^^^^^^ } Hier mal Dein letzter Code um das eingangs erwähnte grep überarbeitet und der gerade genannte Fehler korrigiert. Das Skript ist 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 use strict; use warnings; use XML::Twig; my $file1 = shift @ARGV; # erste Datei ist als erstes Argument angegeben my @files = glob '*.xml'; # lese alle xml-Dateien im Verzeichnis @files = grep { $_ ne $file1 } @files if defined $file1; # entferne $file1 aus Datei-Liste, wenn $file1 definiert ist my $FileResult = 'result.txt'; open( my $FhResult, '>', $FileResult )or die ("Unable to open file $FileResult\n$!"); my $twig1= XML::Twig->new( twig_handlers => { 'Parameter' => sub { my $attr_name = $_->{'att'}->{'name'} // 'fault'; print $FhResult $attr_name . ","; }, }, ); print $FhResult( (split('_', $file1,2))[0] . ',' ); $twig1->parsefile($file1); for my $file (@files) { my $twig1 = XML::Twig->new( twig_handlers => { 'Parameter' => sub { my $attr_value = $_->{'att'}->{'value'} // 'fault'; print $FhResult $attr_value . ","; }, }, ); print $FhResult ( split( '_', "\n$file", 2 ) )[0] . ','; $twig1->parsefile($file); # korrigiert; da hier wahrscheinlich die Dateien geparst werden sollen, die in @files stehen; da ist $file1 falsch! } close $FhResult; 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! |