Thread Einlesen mehrerer Dateien
(38 answers)
Opened by Alex at 2013-04-23 11:08
Du lieferst sehr wenig Informationen, daher kann man schwer etwas zu Deinem "Fehler" sagen.
Wenn Du konkreter würdest, wo Dir der Code unklar ist, kann ich Dir auch Details nachliefern.... Mein Code von gestern 21:00 macht folgendes:
Bei meinem Test daheim hat dieser Code funktioniert. Da ich nicht weiß, wie der von Dir ausgeführte Code aussieht (mein Original oder eine modifizierte Variante), ist nur schwer was zum "Fehler" zu sagen. Auch verlierst Du kein Wort darüber, wo Du das Skript ausgeführt hast. Bist Du ins Verzeichnis gewechselt, wo die Dateien liegen? Zunächst sollte sichergestellt sein, dass ein Code überhaupt Dateien findet, die er verarbeiten würde. Also nochmal überarbeitet; wichtige Änderungen:
(edit: konnte jetzt allerdings nicht testen...) 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 #! /usr/bin/perl use strict; use warnings; # https://www.perl-community.de/bat/poard/thread/18288 use File::Find; # for searching for files/directories use File::Spec::Functions qw( catfile ); # for creating portable file-paths use Cwd; # for determing current work directory my @directories = ( # where do you want to search? '/path/to/data/dir', # herein are the .ffn files; ADJUST THIS PATH ); my %match; # storage for matching file paths # this routine is to be changed to do the job of data extraction and combination # ADJUST THIS CODE if test run was successful sub combine_to { my $newfile = shift; my $directory = shift; my $filesRef = shift; # DEBUG output warn <<DEBUGTEXT; DATADIR: '$directory' OUTPUTFILE: '$newfile' DATAFILES: @{$filesRef} DEBUGTEXT } sub find_ffn_files { return if ! -d $File::Find::name; # skip if not a directory my $dir = $File::Find::name; # short name of directory opendir my $dh, $dir or die "Cannot open '$dir': $!\n"; # read '.ffn' files from directory and create full file path my @files = grep { m/\.ffn$/ } readdir $dh; closedir $dh; # create hash of array for matches; # we must have found 1 or exactly 2 files $match{$dir} = \@files if @files && 2 >= @files; } # search for files and fill @matches find( \&find_ffn_files, @directories ); # check %match for my $dir ( keys %match ) { # combine found files into 'combined.ffn' in corresponding directory combine_to( 'combined.ffn', $dir => $match{$dir} ); } Last edited: 2013-04-30 15:19:57 +0200 (CEST) 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! |