Markus: Anweisungen ausführen, wenn Datei nicht existiert?

Hallo,

wie kann ich es erreichen, dass ein Script nach

open(DATEI,"<daten.dat")

noch Anweisungen ausführt, wenn diese Datei nicht existiert?

Bisher habe ich nur die Möglichkeit gefunden, dass das Script mit einer Fehlermeldung unterbrochen wird.

open(DATEI,"<daten.dat") || die "Datei existiert nicht: $!";

Gruß
Markus

  1. Hallo,

    wie kann ich es erreichen, dass ein Script nach
    open(DATEI,"<daten.dat")
    noch Anweisungen ausführt, wenn diese Datei nicht existiert?
    Bisher habe ich nur die Möglichkeit gefunden, dass das Script mit einer Fehlermeldung unterbrochen wird.
    open(DATEI,"<daten.dat") || die "Datei existiert nicht: $!";

    Verwende kein 'die', z.B.

    open(DATEI,"<daten.dat") || &error("Datei existiert nicht: $!");

    sub error
    {
      print "Content-type: text/html\n\n";
      print "<html><body>";
      print $_[0];
      print "</body></html>";
    }

    Du kannst natürlich auch etwas anderes machen, als die Fehlermeldung am Bildschirm auszugeben.

    Gruß Markus

    1. Hallo,

      open(DATEI,"<daten.dat") || die "Datei existiert nicht: $!";

      Wobei noch anzumerken ist, das hier bei einem Fehler die Datei durchaus existieren kann, sinnvoller wäre deshalb:

      open(DATEI,"<daten.dat") || die "Fehler beim Oeffnen der Datei daten.dat: $!";

      Gruß MArkus

    2. open(DATEI,"<daten.dat") || &error("Datei existiert nicht: $!");

      sub error
      {
        print "Content-type: text/html\n\n";
        print "<html><body>";
        print $_[0];
        print "</body></html>";
      }

      Die Idee mit der Subroutine hatte ich auch schon, aber die meine Version funktioniert nicht. :(

      Hier mal ein paar Code-Schnipsel:

      #!/usr/bin/perl -w

      use strict;
      use CGI::Carp qw(fatalsToBrowser);
      my @Daten;

      open (DATEI, "<userdaten.dat") || Standarddaten();
      @Daten = <DATEI>;
      close(DATEI);

      ...

      Hier werden dann die eingelesene Daten am Bildschirm ausgeben

      ...

      Wenn userdaten.dat nicht geöffnet werden konnte,

      soll eine Alternativ-Datei geöffnet werden

      sub Standarddaten{

      print "Content-type: text/html\n\n";
      print <<"ENDE";
      <html>
      <head>
      <title>Standardeinträge lesen</title>
      </head>
      <body>
      Die Datei konnte nicht geöffnet werden!
      <br>
      Es wird nun eine Datei mit mit Standard-Einträgen verwendet!
      </body>
      </html>
      ENDE

      open (DATEI, "<standarddaten.dat") || die "Fehler beim Öffnen der Datei: $!";
      @Daten = <DATEI>;
      close (DATEI);
      }

      ...

      Gruß
      Markus

  2. Hoi,

    wie kann ich es erreichen, dass ein Script nach
    open(DATEI,"<daten.dat")
    noch Anweisungen ausführt, wenn diese Datei nicht existiert?

    Bisher habe ich nur die Möglichkeit gefunden, dass das Script mit
    einer Fehlermeldung unterbrochen wird.

    open(DATEI,"<daten.dat") || die "Datei existiert nicht: $!";

    Na, dann nutz das doch auch:

    open DATEI,'<daten.dat' or fehlerbehandlung();

    Aber ich glaube, du moechtest dich lieber mit -f beschaeftigen
    (perldoc -f -f):

    unless(-f 'daten.dat') {
      # do something very special
    }

    Gruesse,
     CK

  3. Hallo,
    Alternativ zu der hier bereits genanneten Variante kannst Du auch z.B.

    if(open(FILE,'daswauchimmer')
      {
      # mach was mit FILE
      }
    else
      {
      # ok war wohl nichts mit dem aufmachen, mach was anderes
      }

    und hier gehts mit dem Rest weiter.

    verwenden. (Wobei der else-Zweig nätürlich optional ist;-)

    Grüße
      Klaus