|
Dateien öffnen und schließen
Dateien lesen
Daten in Dateien schreiben
Jede Datei, die Sie mit einem Perl-Script lesen oder in die Sie Daten schreiben wollen, müssen Sie zuerst öffnen. Nachdem Sie eine Datei ausgelesen oder alle gewünschten Inhalte in die Datei geschrieben haben, sollten Sie die Datei stets wieder schließen.
#!/usr/bin/perl open(NEUIGKEITENDATEI, "<news.txt"); # Datei zum Lesen öffnen close(NEUIGKEITENDATEI); open(NEUIGKEITENDATEI, ">news.txt"); # Datei zum Schreiben öffnen close(NEUIGKEITENDATEI); open(NEUIGKEITENDATEI, ">>news.txt"); # Datei zum anhängenden Schreiben öffnen close(NEUIGKEITENDATEI); if(open(COUNTERDATEI, "<counter/counter.dat") == false) { print "Counter-Datei nicht gefunden\n"; } open(COUNTERDATEI, "<counter/counter.dat") || die "Counter-Datei nicht gefunden\n"; |
Als ersten Parameter vergeben Sie einen Datei-Handler. Das ist ein Name, der benötigt wird, um auf die Datei zugreifen zu können. Den Namen für den Datei-Handler können Sie frei vergeben. Es ist üblich und gehört zum guten Ton, für solche Namen ausschließlich Großbuchstaben zu verwenden. In den obigen Beispielen sind NEUIGKEITENDATEI und COUNTERDATEI solche Namen.
Als zweiten Parameter erwartet die open-Funktion die Angabe eines Dateinamens. Wenn die gewünschte Datei sich in einem anderen Verzeichnis befindet, benutzen Sie das gleichen Adressierungs-Schema wie bei HTML-Verweise zu Dateien in anderen Verzeichnissen. Wichtig ist der einfache Schrägstrich zum Trennen von Verzeichnissen, auch wenn Sie das Perl-Script in einer DOS/Windows-Umgebung laufen lassen.
Vor dem Dateinamen und ggfs. der Pfadangabe notieren Sie noch mit Hilfe von Sonderzeichen, in welchem Modus Sie die Datei öffnen möchten:
<datei.dat bedeutet: Datei datei.dat nur zum Lesen öffnen. Die Datei muß existieren, ansonsten gibt es einen Fehler.
>datei.dat bedeutet: Datei datei.dat zum Schreiben von Daten öffnen. Wenn die Datei bereits existiert, wird ihr bisheriger Inhalt überschrieben. Wenn die Datei noch nicht existiert, wird sie automatisch angelegt.
>>datei.dat bedeutet: Datei datei.dat zum Schreiben von Daten öffnen. Wenn die Datei bereits existiert, wird der neue Inhalt an den alten Inhalt angehängt, d.h. der alte Inhalt wird nicht gelöscht. Wenn die Datei noch nicht existiert, wird sie automatisch angelegt.
+>datei.dat bedeutet: Datei datei.dat zum Lesen und zum Schreiben von Daten.
|such.exe bedeutet: Datei wuch.exe ist eine ausführbare Programmdatei. Das Programm wird geöffnet, um es auszuführen.
#!/usr/bin/perl @Zeilen = (""); open(MAILDAT, "<inbox.dat") || die "Datei mit E-Mails nicht gefunden\n"; while(<MAILDAT>) { push(@Zeilen,$_); } close(MAILDAT); for(@Zeilen) { if(/HTML/) { print $_; } } |
#!/usr/bin/perl @Vokale = ("a","e","i","o","u"); @Anzahl = (0,0,0,0,0); open(DATEI, "<$ARGV[0]") || die "$_[1] nicht gefunden\n"; while(($AktuellesZeichen = getc(DATEI)) ne "") { for($i=0;$i<=4;++$i) { if($AktuellesZeichen eq $Vokale[$i]) { $Anzahl[$i]++; } } } close(DATEI); for($i=0;$i<=4;++$i) { print "$Vokale[$i] kommt in $ARGV[0] isg. $Anzahl[$i] mal vor\n"; } |
Binärdateien, also z.B. Dateien mit Dateiformaten bestimmter Anwendungsprogramme, die auch numerische Werte und Steuerzeichen enthalten, lassen sich besser zeichenweise einlesen, so wie im obigen Beispiel 2. Die Perl-Funktion zum Einlesen des jeweils nächsten Zeichens aus einer Datei heißt getc. Diese Funktion gibt jeweils das eingelesene Zeichen zurück, das Sie in einer geeigneten Variablen speichern können. Wenn das Dateiende erreicht wurde, gibt die Funktion ein leeres Zeichen (hexadezimal 0) zurück. Deshalb wird im obigen Beispiel 2 in der while-Schleife zum Einlesen der Datei die Abbruchbedingung mit dem folgenden Vergleichsoperator formuliert: ne "".
#!/usr/bin/perl # Dieses Beispiel liest eine kommabegrenzte Datei mit Adressen ein # und schreibt sie HTML-formatiert in eine neue Datei @Adressen = (""); # Speicher für alle Datensaetze @Datensatz = (""); # Speicher für alle Felder des aktuellen Datensatzes $Felder = ""; # Speicher für die Namen der Felder (stehen in der ersten Dateizeile $i = 0; open(ADRESSEN, "<adressen.csv") || die "Adressendatei nicht gefunden\n"; while(<ADRESSEN>) # Kommabegrenzte Datei einlesen { if($i == 0) # erste Zeile der Datei einlesen { $Felder = $_; # Feldnamen ermitteln } else { $Adressen[$i] = $_; # ab zweiter Zeile in @Adressen einlesen } $i++; # Datensatzzähler erhöhen } close(ADRESSEN); $Anzahl = $i - 1; # Anzahl Datensätze merken chop($Felder); @Datenfelder = split(/,/,$Felder); # Erste Zeile mit Feldnamen aufdröseln open(ADRESSENDAT, ">adressen.htm"); # HTML-Datei zum Schreiben öffnen print ADRESSENDAT "<html>\n<head>\n"; # HTML-Datei schreiben print ADRESSENDAT "<title>Adressen</title>\n"; print ADRESSENDAT "</head>\n<body bgcolor=#FFFFFF>\n"; for(@Adressen) # solange Daten in der Adressenliste sind { @Datensatz = split(/,/,$_); # Aktuellen Datensatz aufdröseln $i = 0; for(@Datensatz) { print ADRESSENDAT "<b>$Datenfelder[$i]:</b> $Datensatz[$i]<br>\n"; # Aktuellen Datensatz schreiben $i++; } } print ADRESSENDAT "</body>\n</html>\n"; close(ADRESSENDAT); print $Anzahl," Datensaetze geschrieben\n"; # Nur zur Kontrolle: auf Standardausgabe |
Blättern: | |||
Unterprogramme und Perl-Funktionen | Zeichenketten und Listen manipulieren |
HTML-Dateien selbst erstellen | |||
Dokumentation: CGI/Perl | |||
CGI und Perl: Perl Sprachelemente |
© 1997 Stefan Münz, s.muenz@euromail.com