ein Kapitel zurück                                           ein Kapitel weiter

Kommen wir jetzt zur Dateien-Verarbeitung. Denn was bringt die beste Programmiersprache wenn keine Dateien Speichern oder wieder Laden kann.
Bevor wir aber aus einer Datei lesen oder schreiben können müssen wir diese zuerst öffnen. Hierzu verwenden wir das in C schon bekannte Schlüsselwort open. Hier ist der Syntax von open.......

open(HANDLE,  "modus $DATEINAME");

Hiermit öffnen wir eine Datei Namens $DATEINAME mit dem Modus modus. Mit dem erzeugten Datei-HANDLE können wir dann die Datei weiterverarbeiten. Folgende Modi stehen uns für das öffnen der Datei zur Verfügung.....

  • open(HANDLE, "datei"); Datei zum Lesen öffnen
  • open(HANDLE, "< datei"); Datei zum Lesen öffnen, existiert diese nicht scheitert die Funkion
  • open(HANDLE, "+< datei"); Datei zum Lesen und Schreiben öffnen
  • open(HANDLE, ">
  • datei"); Datei zum Schreiben öffnen, falls nicht vorhanden wird diese erzeugt
  • open(HANDLE, ">>
  • datei"); Datei öffnen zum Anhängen, falls nicht vorhanden wird diese erzeug

Sollte das öffnen einer Datei fehlschlagen müssen sie nicht wie in anderen Programmiersprachen den Rückgabewert der Funktion überprüfen sondern lediglich eine or-Verknüpfung mit der Funktion 'die' machen....

open(HANDLE, "< $file")
         or
         die "\nKonnte Datei $file nicht zum Lesen öffnen\n";


Jetzt wollen wir aber mal sehen wie wir aus einer Datei lesen können.......

#!/usr/bin/perl -w

print "Welche Datei wollen sie zum Lesen öffenen : " ;
chomp ( $file=<>);

open(FH, "< $file")
 or
 die "\nKonnte die Datei $file nicht zum Lesen öffnen\n";

while($zeile=<FH>){
           if($. %10){     #Alle 10 Zeilen anhalten
               print $zeile;
               }
           else{
               print "Für weiteren Text bitte <ENTER> drücken\n";
              <STDIN>;
               }
   }
close(FH);


Mit diesem einfachen Beispiel öffnen wir die Datei $file falls vorhanden und geben den Text 10-Zeilenweise aus.
Wichtig ist übrigens auch das schließen eines Datei-Handle mit close. Dies versichert das eventuell sich noch im Puffer befindlichen Dateien geschrieben werden und Abgeschlossen werden.

Vorraussetzung das sie Dateien öffnen können ist übrigens auch der richtige Pfadnamen und der komplette Dateiname mit Endung.

Eine weitere Möglichkeit eine Datei zu öffnen ist übrigens auch die Kommandozeile...........

#!/usr/bin/perl -w

$counter=0;
$file="null";
foreach (@ARGV){
         $counter++;
         if($counter > 1){    #Wurde mehr als 1 Argument angegeben
              print "\nProgramm bitte nur mit 1 Argument starten\n";
              last;
              }
         $file=$_;
        }

if($file eq "null" ){  #wurden überhaupt Argumente mit angegeben
           die "\nProgrammaufruf : programm file \n";
          }
elsif($file eq "-h" or $file eq "-help"){
           die "\nSie haben den help-Schalter aufgerufen\n";
          }

open(FH, "< $file")
         or
         die "\nKonnte die Datei $file nicht zum Lesen öffnen\n";

while($zeile=<FH>){
             if($. %10){  #Alle 10 Zeilen anhalten
                   print $zeile;
                   }
             else{
                   print "Für weiteren Text bitte <ENTER>drücken\n";
                   <STDIN>;
                   }
    }
close(FH);


Hier haben wir ein kleines Beispiel wie wir die Kommandozeile mit der Standardvariablen @ARGV auswerten können.

Jetzt fehlt uns eigentlich nur noch die Möglichkeit in eine Datei zu Schreiben. Und das gestaltet noch leichter als das lesen........

#!/usr/bin/perl -w

 print "Welche Datei wollen sie zum Anhängen öffnen : ";
 chomp( $file = <>);

open(FH, ">> $file")
          or
          die "\nKonnte die Datei $file nicht zum Anhängen öffnen\n";

$\ = "\n";                 #Ausgabe mit mit \n beenden
$zeile=<STDIN>;#Eingabe von STDIN
print FH $zeile;       #Eingabe in die geöffnete Datei $file schreiben

close(FH);


Wir benutzen hier lediglich die print-Anweisung und stellen nur den File-Handle davor.
Dies funktioniert natürlich auch mit printf. Die default-Einstellung von print und printf lautet ja.......

print STDOUT $variable;
printf STDOUT "$variable";

Wir benutzen aber immer die kürzere Schreibweise da es ja die default-Einstellung ist.

Somit sind wir jetzt in der Lage Dateien zu kopieren. Dies folgend Programm dürfte nun kein Problem mehr für sie sein........

#!/usr/bin/perl -w

print "Welche Datei wollen sie Kopieren : ";
chomp ($quelle = <>);

print "Wie soll die Kopie heißen : ";
chomp( $ziel = <>);

open(FHquelle, "< $quelle")
        or
        die "\nKonnte die Datei $quelle nicht zum Lesen öffen\n";

open(FHziel, "> $ziel")
         or
         die "\n Konnte die Datei $ziel nicht zum Schreiben öffnen bzw. erzeugen\n";

while($zeile = <FHquelle>){ #Lesen aus der Quelle
                    print FHziel $zeile; }  #Schreiben ins Ziel

close(FHquelle);
close(FHziel);


ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf