Thread Einlesen mehrerer Dateien (38 answers)
Opened by Alex at 2013-04-23 11:08

payx
 2013-04-24 17:23
#167256 #167256
User since
2006-05-04
564 Artikel
BenutzerIn

user image
Hallo String_Test,

wie von Raubtier und Linuxer empfohlen kannst Du CPAN:File::Find verwenden.

Hier eine andere mögliche Lösung mit CPAN: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)

View full thread Einlesen mehrerer Dateien