Thread Dateien nach String durchsuchen
(3 answers)
Opened by Monk at 2008-06-05 02:03 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 56 57 58 59 60 61 62 #!/usr/bin/perl ## bitte immer strict und warnings nutzen: use strict; use warnings; ## wenn man "strict" nutzt, ## muß man alle Variablen mit "my" initialisiern my $suche = "nummer2"; ##das ist falsch: # @list = ""; ## so muß man das schreiben # my @list = (); ## oder einfach my @list; foreach my $file (glob("*.txt")) { ## bitte "|| die" nicht nur "||" das funktioniert nicht! ## beim öffnen kann man auch ausgeben lassen, ## was genau falsch gelaufen ist. ## bitte das das "open" mit den drei Werten nutzen open(READ,'<',$file) || die "Fehler beim oeffnen ($!)"; push (@list,<READ>); close(READ); } ## $count soll doch eine Zahl sein oder? ## perl ändert das zwar automatisch, ## aber schön ist das nicht. #$count = ""; my $count=0; ## nicht @list nicht in Anfühungszeichen!!! ## sonst fügst du die Einträge der Liste als String zusammen! foreach my $movie (@list) { $count++; if ($movie =~/$suche/i) { ## die Ausgabe ist etwas umständlich ## und zudem noch falch. ## auf ein Array greift man mit $list[$count] zu # print "Gefunden : ","@list[$count]"; ## die Zeile steht doch schon in $movie. ## zudem ist die Ausgabe immer, ## da der erste Eintrag in der liste in $liste[0] ## $count hats du aber schon um eins erhöt, ## und ist für die erste Zeile 1 nicht 0 wie es richtig wäre. ## daher dein Probleme. ## allso entweder: # print "Gefunden : $liste[$count]\n"; ## oder print "Gefunden: $movie\n"; } else { ## Ist dir nie aufgefallen das die Ausgabe ohne newlines war? ## und das es insgesammt nie drei Ausgaben waren? print "Nix gefunden\n"; } } |