Thread Einlesen mehrerer Dateien
(38 answers)
Opened by Alex at 2013-04-23 11:08
Hallo String_Test,
wie von Raubtier und Linuxer empfohlen kannst Du File::Find verwenden. Hier eine andere mögliche Lösung mit File::Util. Ich habe mein erstes Beispiel umgeschrieben, sodass Du die entsprechenden Anpassungen ggf. wieder selbst machen musst. Das Quellverzeichnis wir rekursiv ausgelesen, d.h. mit allen Unterverzeichnissen (--recurse). Eine dringende Empfehlung zu Zeile 3 und 4 in Deinem Script: Kommentiere use strict; und use warnings; nicht aus. Diese beiden Pragmas sind wirklich sehr nützlich. Wenn Dein Script damit nicht läuft, suche und behebe den Fehler. 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 #!/usr/bin/perl use strict; use warnings; use File::Util; # Das Verzeichnis mit den auszulesenden Dateien: my $sourceDir = 'C:\test'; # Die Datei, in die geschrieben werden soll: my $outFile = "out.txt"; # Die Zieldatei wird zum schreiben geöffnet: open my $outFH, ">", $outFile or die $!; # File-Util-Objekt erzeugen: my $fu = File::Util->new(); # Das Verzeichnis wird ausgelesen (hier: nur .txt-Dateien) und der Inhalt wird in ein Array geschrieben: my @allfiles = grep /\.txt$/, $fu->list_dir($sourceDir, qw(--files-only --recurse)); # Schleife über alle Dateien im Array (NB: for ist in Perl dasselbe wie foreach) for my $sourceFile (@allfiles) { # Eine Datei wird lesend geöffnet open my $sourceFH, "<", $sourceFile or die $!; # Schleife über die Zeilen in einer Datei while (my $row = <$sourceFH>) { # Text, der zwischen 'Blockanfang' und 'Blockende' liegt (Flipflop-Operator), wird in die Zieldatei geschrieben. print $outFH $row if $row =~ /Blockanfang/ .. $row =~ /Blockende/; } close $sourceFH; } close $outFH; print "fertig!"; HTH Grüße payx Last edited: 2013-04-24 17:25:01 +0200 (CEST) |