Ark: while( filehandle ) { ausgeben } und in skalar einlesen

hiho

Keine Ahnung ob in diesem HTML Forum wer perl kann aber versuchen wirs mal!

Textdateien lesen und ausgeben tat ich immer so:

open(DATEI, "<text.txt") || die "nix da";
flock(DATEI, 2);
my @inhalt = <DATEI>;
flock(DATEI, 8);
close(DATEI);

for(@inhalt) { print $_; }

Nun muss also zuerst @inhalt gefüllt werden,
und dann nochmals @inhalt durchgegangen werden um es auszugeben.

1. Frage
Gesucht wird nach der Lösung mit welcher man
während der geöffneten textdatei solange sie sogar noch
unter  'flock' steht  ausgegeben werden kann.
Das war irgendwas mit  while(FILEHANDLE)  aber ich bekomms nicht mehr hin.

2. Frage:
Wie kann man eine Textdatei welche mehrere Zeilen enthält
in einen scalar einlesen?
my @inhalt = <DATEI>;   tut es in einen @array einlesen.
Der Versuch  my $my_scalar = <DATEI>;   gab nur die erste Zeile zurück.

Dangge :P
Ark (bzw. HexA für die Leute vom irc)

  1. Hi,

    Das war irgendwas mit  while(FILEHANDLE)  aber ich bekomms nicht mehr hin.

    komisch, in Deinem Posting hast Du bereits zwei Ansätze genannt.

    Wie kann man eine Textdatei welche mehrere Zeilen enthält
    in einen scalar einlesen?

    Durch Setzen von $/ auf einen hinreichend günstigen Wert. Siehe perldoc perlvar.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
  2. 你好 Ark,

    1. Frage
      Gesucht wird nach der Lösung mit welcher man
      während der geöffneten textdatei solange sie sogar noch
      unter  'flock' steht  ausgegeben werden kann.
      Das war irgendwas mit  while(FILEHANDLE)  aber ich bekomms nicht mehr hin.

    Du meinst vermutlich

      
    print while <HANDLE>;  
    
    
    1. Frage:
      Wie kann man eine Textdatei welche mehrere Zeilen enthält
      in einen scalar einlesen?
      my @inhalt = <DATEI>;   tut es in einen @array einlesen.
      Der Versuch  my $my_scalar = <DATEI>;   gab nur die erste Zeile zurück.

    Du musst den “Record Seperator” umsetzen:

      
    my $scalar = '';  
    {  
      local $/;  
      $scalar = <HANDLE>;  
    }  
      
    print $scalar;  
    
    

    再见,
     CK

    --
    lim(3->4)(sqrt(3)) = 2
    http://wwwtech.de/
  3. Ergänzend noch:

    flock(DATEI, 8);
    close(DATEI);

    Das sollte man ncht tun. Denn close gibt die Datei explizit frei und unter ganz schlechten Umständen greift ein paraleller Prozeß genau zwichen flock und close zu und dann war das ganze gelocke für die Katz.

    Struppi.