Hell-O!
also eigentlich verarbeitet der mehrere Ausgangsdateien. Aus der ersten zieht er einen Wert und die Zeilennamen, für die anderen Dateien soll er die Werte nur den Zeilen zuordnen und hinten anhängen.
Du hast also eine bzw. mehrere Dateien, die dir sagen, welche Dateien du verarbeiten sollst, das Dateinamenschema steht fest? Dann wäre dein Code ziemlich umständlich. Entweder du setzt das Standardmodul File::Find ein oder programmierst das Ganze zu Fuß. Letzteres könnte so aussehen:
# Array für die Quelldateien
my @infiles;
# Pfad zu den Quelldaten
my $sourcedir = '/pfad/zu/deinen/daten/';
# Suchmuster für die Quelldateien
# Mein Schema: datei_00.dat
my $pattern = 'datei_\d{2}\.dat';
opendir(DIR, $sourcedir) || die "Could not read $sourcedir: $!";
@infiles = grep { /^$pattern$/ } readdir(DIR);
closedir(DIR);
Im Ergebnis stehen im Array @infiles alle Dateien, die ihrerseits Dateilisten enthalten. Die kannst du jetzt nacheinander öffnen und abfragen, indem du sie mit einer foreach-Schleife durchgehst:
my @sourcefiles;
foreach(@infiles) {
open(FH, "$_") || die "Could not open $_: $!";
flock(FH, 1);
while(<FH>) {
chomp $_;
push @sourcefiles, $_;
}
}
Jetzt hast du alle Quelldateien in deinem Array @sourcefiles. Dieses gehst du wieder mit einer foreach-Schleife durch, extrahierst die Daten, die du brauchst und schreibst sie gleich weg, so wie ich es in meinem simplen Beispiel geschrieben habe. Übrigens solltest du beim Steuern des Auslesevorgangs mal über die Verwendung von continue, next und last nachdenken.
und jetzt kommt das berühmte seek...
Ich sehe nicht, wofür du das seek brauchst.
Siechfred