kaepten: Datei Zeilenweise (ein)-lesen

Hallo Forumsgemeinde

Wenn ich eine Datei Zeilenweise einlese:

open(FILE,"datei.ext");  
@LINES=<FILE>;  
close(FILE);  
$SIZE=@LINES;  

Was ist eine Zeile?

Ist eine Zeile ein Textfragment das mit \n (oder Dateianfang) beginnt und mit \n beendet wird?

Muss ich mir da keine Sorgen machen, dass eine Zeile ev. zu viele Zeichen für LINES enthält?

cheers
kaepten

  1. Hallo kaepten,

    Wenn ich eine Datei Zeilenweise einlese:

    »»  open(FILE,"datei.ext");
    »»  @LINES=<FILE>;
    »»  close(FILE);
    »»  $SIZE=@LINES;

    mit obigen Script liest Du die Datei auf einen Rutsch (hier sind die Zeilenumbrüche so enthalten wie in der Datei stehen...) ein, wenn Du es zeilenweise machen möchtest:

    open(FILE, "datei.ext");
    while(<FILE>){

    chomp ($_); # evntl. Zeilenumbrüche "\n" abschneiden

    push (@LINES, $_);
    }
    close (FILE);
    $SIZE=@LINES; # Anzahl der Zeilen

    Wenn Du die chomp() Funktion weglässt, bleiben die Zeilenumbrüche also so erhalten wie in der Datei stehen.
    Schreib das array mal in eine neue Datei, dann siehst Du es...

    Viele Grüße, Rolf

    1. Schreib das array mal in eine neue Datei, dann siehst Du es...

      Hoi Rolf
      Danke für die Antwort.

      Das mach ich auch. Ich schreibe dann mit:

      print FILE $LINES[$i];

      Das Zeugs wieder rein. Ich frag mich nur, wo die Grenze der Kapazität der Variabel LINES liegt. Im schlimmsten Fall könnte ja in einer 100kB Datei kein einziger Zeilenumbruch "\n" sein, dann würde die Datenmenge in $LINES[0] abgelegt sein??

      Wenn ich aber Deinen Code und den von mir zuvor ansehe, würde ich doch sagen, dass genau das Selbe passiert und daraus genau das gleiche Resultiert. (Ausser dem chomp() natürlich)

      cheers
      kaepten

      1. Ich frag mich nur, wo die Grenze der Kapazität der Variabel LINES liegt. Im schlimmsten Fall könnte ja in einer 100kB Datei kein einziger Zeilenumbruch "\n" sein, dann würde die Datenmenge in $LINES[0] abgelegt sein??

        Davor würde ich keine Angst haben, wir sind ja nicht mehr unter DOS mit 64k-Segmenten usw.

        Schreib doch mal eine Schleife, in der Du an ein Array pro Durchgang einen 100-Byte-String an-pop()st und alle 1000 Durchgänge eine Meldung ausgibst. Wahrscheinlich wird das funktionieren, bis Dein SwapSpace voll ist ...