Thread Datei nach Zeichen durchsuchen (15 answers)
Opened by Emeto at 2011-07-01 18:09

Gast Emeto
 2011-07-01 18:09
#150073 #150073
Hallo an alle,

ich beschäftige mich mit Perl seit 1 Monat.

Ich soll ein Script schreiben, das eine Datei mit super vielen Zeilen durchlesen soll und verschiedene Error-Typen findet.

Z.B Zeile: u,799:,0,,/201;[23]

Das Error ist in den eckigen Klammern geschrieben: [23]

Das Script soll der Anzahl der Fehler pro Fehlertyp geben (schon geschafft:)) und die Zeilen , wo ein bestimmtes Fehler erscheint in einem separaten File schreibt, Z.B file_[23].txt.

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
#!/usr/local/bin/perl -w
use strict;


my $dumpfile = "Proba.txt";  # write the name of the input file
my $resdir   = "errors";    # directory where will be saved the files with the different error records
my %error;      


#------------------------------------------------------------------------------------------------------------------------------------------------------------------------
open(IN,$dumpfile) || die "Fehler beim Öffnen von $dumpfile: $!\n";

print "Error_Type\tCount\n";

while (<IN>){ 

        chomp($_);

        if(/([\[]\d+[\]])/){ # find an error number in the input file. format: [0-310] 

        my $number="$1";
       $error{$number} += 1;                                       
                }
}

close(IN);


foreach my $key (sort keys %error){                     
        print $key."\t"."\t".$error{$key}."\n"  
        }

#--------------------------------------------------------------------------

if (! -d $resdir) {
   mkdir($resdir) || die("Could not create result directory $resdir\n");                                                                                 
}


foreach my $key (sort keys %error){ 
        
        open(IN,$dumpfile) || die "Fehler beim Öffnen von $dumpfile: $!\n";
        open(OUT, ">$resdir/${dumpfile}_$key.txt");

        while (<IN>){
        chomp($_);

        if(/.*[$key]/){
                
                        printf OUT ("$_\n"); 
                }
        }
        close (OUT);
        close (IN);
}


Die IF-Anweisung : if(/.*[$key]/) ist irgendwie falsch.Wenn es errors z.B [2],[23],[223] existieren, dann schreibt in der Detei_[23] die Zeile mit dem Fehler [2] und in der Datei_[223] alle Zeilen, die die Fehler [2] und [23]enthalten. Ich verstehe das leider nicht.

Hier ein Muster von diesem Datei:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
d,799,,1,0,,,,,10,1,1,:v:,,04//71;[23]
o,799,,1,0,,,,,12,1,1,:t:,,04//2555;[223]
a,799,,1,0,,,,,10,1,1,:vf:,,07//201;[23]
o,7921,,4,0,,,,,10,1,1,:vt:,,04//331;[0]
k,799,,1,0,,,,,16,1,1,:hh:,,0/201;[2]
o,792,,5,0,,,,,10,1,1,:gg:,,00//2441,,[10]
w,7009,,,0,,,,,14,1,1,:we:,,03//201,,[1]
u,799,,0,0,,,,,10,1,1,:tt:,,04//211;[4]
o,769,,1,0,,,,,17,1,1,:ff:,,09//251;[23]
p,7,,66,0,,,,,10,1,1,:ss:,,04//231;[214]
s,83,,1,0,,,,,1,1,1,ht:,,08//2991,,[23]



Herzlichen Dank im Voraus:) Ich muss das Script am Montag abgeben.

SG,
emeto

modedit Editiert von pq: Code in perl- und code-Tags gesetzt
Last edited: 2011-07-01 18:13:22 +0200 (CEST)

View full thread Datei nach Zeichen durchsuchen