Textdatei an eine bestimmte Zeile lesen
karla
- perl
2 Christian Kruse0 karla1 Christian Kruse-1 coolblue
hallo,
ich habe eine txt Datei die ich mit einem Perlprogramm einlese und auswerte.
Mein Problem ist, ich will die Datei ab eine bestimmte Position(Zeile) lesen.
Habe mit folgendem Code versucht aber es scheint nicht zu klappen!
$pos=5;
open (IN,"<$file") or die "Can't open the file: $!\n";
seek($file, $pos, 1);
while(<IN>){ }
Hat jemand eine Idee wie das geht?
Danke im voraus
mari
你好 karla,
Mein Problem ist, ich will die Datei ab eine bestimmte Position(Zeile)
lesen.
Wenn deine Zeilen nicht alle gleich lang sind, wird dir nichts anderes
uebrig bleiben als alle Zeilen vorher auszulesen und zu verwerfen bis du
an die betreffende Zeile kommst. Beispiel:
1 while(<IN> && $. < 5);
$line = <IN>;
print "Gesuchte Zeile: $line\n";
再见,
CK
Wenn deine Zeilen nicht alle gleich lang sind, wird dir nichts anderes
uebrig bleiben als alle Zeilen vorher auszulesen und zu verwerfen bis du
an die betreffende Zeile kommst. Beispiel:1 while(<IN> && $. < 5);
$line = <IN>;print "Gesuchte Zeile: $line\n";
再见,
CK
Hallo Christian,
Danke für die Antwort.
Die Zeilen sind nicht gleich lang.
Die Datei, die ich einlese ist sehr groß (80 Mb)
Könnte es vielleicht Performance Probleme geben, wenn ich alle Zeilen vorher auslese?
Ich muss nicht immer von der Zeile 5 anfangen, es kann sein, dass ich von der Zeile 1000 anfange zu lesen.
Gruß Karla
你好 karla,
Wenn deine Zeilen nicht alle gleich lang sind, wird dir nichts anderes
uebrig bleiben als alle Zeilen vorher auszulesen und zu verwerfen bis du
an die betreffende Zeile kommst. Beispiel:1 while(<IN> && $. < 5);
$line = <IN>;print "Gesuchte Zeile: $line\n";
Danke für die Antwort.
Die Zeilen sind nicht gleich lang.
Die Datei, die ich einlese ist sehr groß (80 Mb)
Könnte es vielleicht Performance Probleme geben, wenn ich alle Zeilen
vorher auslese?
Es koennte nicht nur, es wird wahrscheinlich auch. Du musst dir halt
ueberlegen, wie du die Datei organisieren willst. Du koenntest z. B.
einen Index dazu erstellen.
再见,
CK
Hallo,
1 while(<IN> && $. < 5);
$line = <IN>;
ich bin kein Perl Genie, aber würde der Prozess nicht gewaltig an Speicher zunehmen, wenn man mit $line=<IN>; die Datei einliest?
wie wäre es mit:
for(my $i=0; <IN> ; $i++) {
if($i == 5) {
while(<IN>) {
print; # oder was auch immer mit der zeile passieren soll
}
}
}
Die while Schleife läuft dann ab Zeile 5 weiter und dein Speicher sollte auch verschont bleiben.
Viele Grüße,
coolblue
你好 coolblue,
1 while(<IN> && $. < 5);
$line = <IN>;ich bin kein Perl Genie, aber würde der Prozess nicht gewaltig an Speicher
zunehmen, wenn man mit $line=<IN>; die Datei einliest?
1. Nein, weil $line jedesmal ueberschrieben wuerde
2. Passiert das gar nicht, die kleine 1 am Anfang und das Semikolon am Ende
nicht gesehen? Das ist eine kompakte Form fuer
while(<IN> && $. < 5) {
1;
}
再见,
CK
Hallo Christian,
- Nein, weil $line jedesmal ueberschrieben wuerde
- Passiert das gar nicht, die kleine 1 am Anfang und das Semikolon am Ende
nicht gesehen? Das ist eine kompakte Form fuerwhile(<IN> && $. < 5) {
1;
}
ok Denkfehler! Sorry! Wie gesagt, bin noch ein Neuling :-)
open(FILE,"<$FILE");
$line=<FILE>;
wäre wohl auf meinen Verdacht zutreffend!
Aber wäre mein Vorschlag denn auch ok?
Viele Grüße,
coolblue