Markus Huszar: open-problemstellung

Hallo Leutz,
ich hab ein Problem. Und zwar habe ich eine Liste @eing, in der diverse Eingaben drinnen stehen. Diese werden im Laufe des Programmes abgefragt und darin gespeichert.
Am Ende will ich dann soviele Dateien erstellen wie es Einträge in der Liste gibt.
z.B:
...
@eing = ("001", "003", "test", "mag") # ev. mehr oder weniger, je nachdem
...
danach will ich die Dateien öffnen/erstellen - und hier hakt es:
foreach(@eing)
{
open($eing[$e], ">$ARGV[0].$eing[$e]");
$e++;
}
Ich hoffe ihr habt einigermaßen den Überblick und versteht was ich meine. Wie kann man das realisieren? Geht das so wie ich es gemacht habe?

MfG
Markus

  1. Hallo,

    danach will ich die Dateien öffnen/erstellen - und hier hakt es:
    foreach(@eing)
    {
    open($eing[$e], ">$ARGV[0].$eing[$e]");
    $e++;
    }

    Abgesehen davon, daß da noch ein 'close' fehlt, könnte ich nicht sagen, was nicht stimmt.
    Was funktioniert also nicht? Ohne Fehlermeldung und genaue Fehlerbeschreibung ist das ganze nur Raterei, also z.B.

    open($eing[$e], ">$ARGV[0].$eing[$e]") or die "Nix da mit aufmachen von $ARGV[0].$eing[$e] : $!\n";

    wäre da sicherlich aufschlußreicher. Auch in welchem Umfeld das passiert könnte dazu beitragen, den Schleier zu lüften.

    perldoc -f open
    perdoc opentut

    Hast Du sicherlich schon gelesen, oder?

    Grüße
      Klaus

  2. Morgen Markus,

    danach will ich die Dateien öffnen/erstellen - und hier hakt es:
    foreach(@eing)
    {
    open($eing[$e], ">$ARGV[0].$eing[$e]");
    $e++;
    }

    Vielleicht hab ich gerade nur die Falsche Denkrichtung eingeschlagen, die "Richtigen PERL-Experten" duerfen mich sehr gerne verbessern, aber wahre nicht:

    open($eing[$e], ">$ARGV[0].$eing[$e]");
    foreach(@eing)
    {
    $e++;
    }

    Eine bessere Loesung? Du oeffnest dann die Datei (oder was sonst) nur einmal und danach wird die Schleife ausgefuehrt und schreibt die Werte.

    gruesse
      jens mueller

    1. Hi,

      open($eing[$e], ">$ARGV[0].$eing[$e]");
      foreach(@eing)
      {
      $e++;
      }

      Eine bessere Loesung? Du oeffnest dann die Datei (oder was sonst) nur einmal und danach wird die Schleife ausgefuehrt und schreibt die Werte.

      Soweit ich das verstanden habe, will er aber für jedes Element im Array eine eigene Datei erstellen, nicht alle Werte in eine Datei schreiben.

      Grüße,
      Crunch

  3. Hallo,

    Hallo Leutz,

    Bitte wer?

    [... Liste mit Dateinamen ...]

    danach will ich die Dateien öffnen/erstellen - und hier hakt es:
    foreach(@eing)
    {
    open($eing[$e], ">$ARGV[0].$eing[$e]");
    $e++;
    }

    Wozu ein $e, wenn du doch eh mit foreach arbeitest? Warum nicht einfach
    so:

    foreach(@eing)
     {
      local *DAT;
      open(DAT, '>'.$ARGV[0].$_) or die $!;  # nicht vergessen!
      $_ = \*DAT;
     }

    Hierbei darfst du aber nicht vergessen, die Dateien wieder zu
    schliessen, z. B. mit

    foreach(@eing)
     {
      close $_ or die $!;
     }

    perldoc perlopentut, perldoc perldata und perldoc -f open helfen
    btw. auch.

    Gruss,
     CK

    1. Hoi,

      foreach(@eing)
      {
        close $_ or die $!;
      }

      Es muss natuerlich

      close *$_;

      heissen.

      Gruss,
       CK

    2. hi!

      [...]

      perldoc perlopentut, perldoc perldata und perldoc -f open helfen
      btw. auch.

      Was hälst du davon, den Leuten wenigstens ansatzweise zu erklären,
      was du da eigentlich machst? Ich glaube nicht, dass Markus deinen
      Code verstanden hat... ;))

      bye, Frank!

      1. Joho,

        Was hälst du davon, den Leuten wenigstens ansatzweise zu erklären,
        was du da eigentlich machst? Ich glaube nicht, dass Markus deinen
        Code verstanden hat... ;))

        Das mache ich, wenn ich merke, jemand hat die Dokumentation
        gelesen. Ansonsten gibts nur einen Verweis auf die Stelle, wo man
        es nachlesen kann.

        Gruss,
         CK