karla: Textdatei an eine bestimmte Zeile lesen

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

  1. 你好 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

    --
    Beware Evildoers for my deed is done and every little damsel in distress will be shelted!
    http://wwwtech.de/
    1. 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

      1. 你好 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

        --
        Der Verstand steht ueber allem. Was durch die Vorstellungskraft nicht geschaffen werden kann, existiert nicht.
        http://wwwtech.de/
        1. 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

          --

          never say oops after you submitted a job :-)
          _der_Ton_macht_die_Musik_!!!_
          1. 你好 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

            --
            Ihr wisst nicht, wie man den Menschen dient. Wie sollt ihr wissen, wie man den Goettern dienen soll?
            http://wwwtech.de/
            1. Hallo Christian,

              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;
              }

              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

              --

              never say oops after you submitted a job :-)
              _der_Ton_macht_die_Musik_!!!_