Thorsten: -> blutiger Anfänger - Datei auslesen

Hallo,

ich bin ein ganz blutiger Anfänger in Sachen Perl.

Also ich weiß schon dank SelfHtml, wie ich eine Datei öffne.

z.B. open(DATEI, "<textdatei.txt");

ich hab aber jetzt noch nicht so ganz verstanden, wie ich den Text, der in der Datei steht, jetzt in eine Variable speichere.

Da gibt's doch "read", aber da muss man eine bestimmte Anzahl von Zeichen angeben, ich will aber alle Zeichen der Datei. Da komm ich nicht weiter.

Dann bin ich noch per Zufall im Forum auf folgenden Syntax gestoßen:
@Variable = <DATEI>;
Geht das? Wenn ja, find ich das irgendwo in Selfhtml beschrieben? Und warum brauch ich da ein @ und kein $ (warum eine Liste und kein Skalar)?

Also wie schreib ich am einfachsten den Inhalt einer Datei in eine Variable?

Schon mal Danke im Voraus,
Thorsten anfänger

  1. Hallo Thorsten,

    Also ich weiß schon dank SelfHtml, wie ich eine Datei öffne.

    z.B. open(DATEI, "<textdatei.txt");

    Gewöhn dir am besten direkt an mögliche Fehler abzufragen (das erspart dir irgendwann einmal viel Arbeit). Also besser:

    open(DATEI, "<textdatei.txt") or "Fehler: Kann Datei textdatei.txt nicht öffnen: $!\n";

    Dann bin ich noch per Zufall im Forum auf folgenden Syntax gestoßen:
    @Variable = <DATEI>;
    Geht das? Wenn ja, find ich das irgendwo in Selfhtml beschrieben? Und warum brauch ich da ein @ und kein $ (warum eine Liste und kein Skalar)?

    Ich denke http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#open wird dir weiterhelfen.

    Grüße,

    Peter

    1. Dann bin ich noch per Zufall im Forum auf folgenden Syntax gestoßen:
      @Variable = <DATEI>;
      Geht das? Wenn ja, find ich das irgendwo in Selfhtml beschrieben? Und warum brauch ich da ein @ und kein $ (warum eine Liste und kein Skalar)?

      Ich denke http://selfhtml.teamone.de/cgiperl/funktionen/einausgabe.htm#open wird dir weiterhelfen.

      Oh mann ich muss blind gewesen sein! Danke sehr.

      Ich weiß jetzt, dass in den Einträgen von @Variable je eine Zeile steht.
      Was passiert, wenn ich das mache:
      $Variable = <DATEI>;
      Man beachte das $ statt dem @. Wird dann die ganze Datei in den einen Skalar geschrieben?

      Schöne Grüße,
      Thorsten

  2. Hallo.

    Da gibt's doch "read", aber da muss man eine bestimmte Anzahl von Zeichen angeben, ich will aber alle Zeichen der Datei. Da komm ich nicht weiter.

    Wenn du wissen willst, wie viele Zeichen in der Datei enthalten sind, kannst du den Dateitestoperator[1] -s verwenden.

    Die Datei wird, wie du das schon getan hast, geöffnet:

    open(DATEI,"<textdatei.txt");

    Zum Auslesen benutzt du dann read, was so aussieht:

    read(DATEI,my $Inhalt,-s DATEI);

    In die Variable $Inhalt wird der Inhalt der Datei mit dem Datei-Handler DATEI geschrieben, als Anzahl der auszulesenden Zeichen wird die Größe der Datei (-s DATEI) angegeben, wodurch alle Zeichen ausgelesen werden.

    Dann bin ich noch per Zufall im Forum auf folgenden Syntax gestoßen:
    @Variable = <DATEI>;
    Geht das?

    Ja, das geht auch.

    Wenn ja, find ich das irgendwo in Selfhtml beschrieben?

    In Selfhtml steht das afaik nicht.

    Und warum brauch ich da ein @ und kein $ (warum eine Liste und kein Skalar)?

    Mit @Variable = <DATEI>; wird die Datei zeilenweise ausgelesen, und in die Liste geschrieben, im ersten Listeneintrag findet sich die erste Zeile, im Zweiten die Zweite, usw.
    Wenn du statt @Variable $Variable verwendest, wird in $Variable die Zeilenanzahl (bzw. Listenlänge) geschrieben.

    Gruß
    Norbert

    [1] http://selfhtml.teamone.de/cgiperl/funktionen/dateiverwaltung.htm#dateitest

    1. Hallo.

      Da gibt's doch "read", aber da muss man eine bestimmte Anzahl von Zeichen angeben, ich will aber alle Zeichen der Datei. Da komm ich nicht weiter.

      Wenn du wissen willst, wie viele Zeichen in der Datei enthalten sind, kannst du den Dateitestoperator[1] -s verwenden.

      Die Datei wird, wie du das schon getan hast, geöffnet:

      open(DATEI,"<textdatei.txt");

      Zum Auslesen benutzt du dann read, was so aussieht:

      read(DATEI,my $Inhalt,-s DATEI);

      In die Variable $Inhalt wird der Inhalt der Datei mit dem Datei-Handler DATEI geschrieben, als Anzahl der auszulesenden Zeichen wird die Größe der Datei (-s DATEI) angegeben, wodurch alle Zeichen ausgelesen werden.

      Wenn wir schon mal dabei sind, kann ich irgendwie auslesen, wann die Datei textdatei.txt zuletzt geändert wurde?