PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl script zum durchsuchen einer Datei



craano
21.10.06, 23:19
Hallo,

ich sehe gereade den Wald vor lauter Bäumen nicht.

Ich versuche eine Datei mit einem Perl Script zu durchsuchen.
Das klappt auch ganz gut, nur wenn ich den regulären Ausdruck, nach welchem ich suche, durch <STDIN> erfasse bekomme ich kein Ergebnis.



#!/usr/bin/perl -w
#
#
#
#
open(FILER,"111.t")
or die "Fehler beim Öffnen der Datei: $1";
my $suchen;
my @treffer;
print "Wonach soll gesucht werden: ";
$suchen = <STDIN>;
while(defined(my $i = <FILER>)) {
if($i =~ /.$suchen./) {
push(@treffer,$i);
}}
my $trefferzahl = @treffer;
print "$trefferzahl\n";
close(FILER)
or die "Fehler beim Schließen von 'neu.dat': $! ";


Wenn ich
$suchen = "555"; setze, ohne von <STDIN> zu lesen, läuft das script durch und liefert 55555977 Treffer. $suchen Von <STDIN> erfasst liefert leider 0 Ergebnisse.

Was verändert <STDIN> an meinem string?
Wird ein Zeichen angehängt? Vielleicht irgendwie \n oder \c? (Die beiden sind es nicht, das habe ich schon probiert).
Was muss ich an $suchen verändern/entfernen?

Grüße.
craano.

craano
21.10.06, 23:33
Ich glaube ich bin auf der richtigen Spur.

Da in dieser Zeichenkette noch das Zeichen für den Zeilenvorschub enthalten ist wird dieser in der Zeile (4) mit chop($name) entfernt.


Also flugs ein
$suchen = chop($suchen);eingebaut.

Doch leider kein Erfolg. Nur ein noch seltsameres Verhalten. Anscheinend ist die Variable $suchen nach chop() nun ganz leer.

Ein zur Kontrolle eingebautes
print "$suchen"; nach der chop() - Funktion bringt nur eine LEERE Zeile als Ausgabe auf den Bildschirm!

Jetzt verstehe ich gar nichts mehr.

Grüße.
craano.

craano
21.10.06, 23:54
Endlich, Erfolg!

War ein wenig blind.


Erwartet als Parameter:
1. eine Variable, auf die die Funktion angewendet werden soll. Alternativ kann auch eine Liste übergeben werden. Wird eine Liste übergeben, gibt chop das abgeschnittene Zeichen des letzen Listenelementes zurück.

Ein schlichtes
chop($suchen); führt zur Lösung.

Gute Nacht.
craano.

Kleinhirn
22.10.06, 08:38
Hallo craano,

verwende anstatt chop lieber chomp.
Dies entfernt Zeilenendezeichen nur, wenn auch eins vorhanden ist. Ansonsten ändert chomp nichts an Deiner Variable.

craano
22.10.06, 17:59
Ok, Danke Kleinhirn,

jetzt läuft alles perfekt.

Grüße.
craano.