Thread Datei nach Zeichen durchsuchen
(15 answers)
Opened by Emeto at 2011-07-01 18:09
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 d,799,,1,0,,,,,10,1,1,:v:,,04//71;[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) |