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

FIFO
 2011-07-01 20:19
#150075 #150075
User since
2005-06-01
469 Artikel
BenutzerIn

user image
Guest Emeto
Code (perl): (dl )
1
2
3
4
# ...
    if(/([\[]\d+[\]])/){ # find an error number in the input file. format: [0-310]
# ...
    if(/.*[$key]/){


Du musst in der zweiten RegEx zumindest die öffnende eckige Klammer oder einfach beide escapen:
Code (perl): (dl )
if(/.*\[$key\]/){ ... }

In der ersten RegEx machst Du das, aber unnötig unübersichtlich mit Zeichenklassen, einfacher wäre:
Code (perl): (dl )
if(/(\[\d+\])/){ ... }


Die erste Schleife würde ich so schreiben:
Code (perl): (dl )
1
2
3
4
5
while (my $line = <IN>){ 
    if ($line =~ m|(\[\d+\])|){ 
        $error{$1} += 1;
    }                                       
}

Du hast in Deiner ersten RegEx übrigens die eckigen Klammern mit im Ergebnis ($1). Wenn Du nur die Zahl brauchst, musst Du $line =~ m|\[(\d+)\]| schreiben. edit: Wenn die Klammern absichtlich dabei sind, musst Du sie in der 2. RegEx dann weglassen.
Die implizite Verwendung von $_ ist zwar auf den ersten Blick lässig, hat aber ihre Tücken. Für das Patternmatching muss man nicht immer '/' als Begrenzung nehmen. Hier macht das '|' z.B. die Grenzen der RegEx deutlicher, und Du kommst mit der '/\'-Mixtur nicht so schnell durcheinander (Mikado-Pattern).


Gruß FIFO

EDIT: Du verwendest printf statt print, das funktioniert so nicht.

Last edited: 2011-07-01 20:28:37 +0200 (CEST)
Everyone knows that debugging is twice as hard as writing a program in the first place. So if you're as clever as you can be when you write it, how will you ever debug it? -- Brian Kernighan: "The Elements of Programming Style"

View full thread Datei nach Zeichen durchsuchen