Thread File::Find - bestimmte Dateien in Verzeichnis finden (21 answers)
Opened by Henri at 2015-04-22 00:00

Linuxer
 2015-04-26 00:26
#180815 #180815
User since
2006-01-27
3870 Artikel
HausmeisterIn

user image
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!

View full thread File::Find - bestimmte Dateien in Verzeichnis finden