Florian Bender: for-Schleife tut mehr als sie sollte

Hallo Forumsbesucher,

ich habe eben ein kleines Programm geschrieben.  Jetzt erst mal der Quelltext:

--------------------------------------------------------
#!c:/perl/bin/perl.exe

$daten = 0;
$index = ".txt";
$hantel = 0;
$zaehler = 0;

for($i=0;$i<=3;$i++)
{
    $daten++;
    $hantel++;
    $zaehler++;
    open($hantel, ">$daten$index")
    print $hantel "Hallo $zaehler";
    close($hantel);
}
--------------------------------------------------------

Dieses Script ist das Ergebnis eines Versuchs etwas zu schreiben, das Dateien mit verschiedenen Namen erstellt und verschiedene Daten in diese Dateien schreibt.  Wie man in der for-Schleife sehen kann, sollte das Script eigentlich 3 Dateien erstellen, aber es erstellt 4.  Wieso ist das so und wie koennte ich es wieder aendern ?

Danke im Vorraus,
  Gruesse aus Spanien
    Florian Bender

  1. #!c:/perl/bin/perl.exe

    $daten = 0;
    $index = ".txt";
    $hantel = 0;
    $zaehler = 0;

    for($i=0;$i<=3;$i++)

    daraus machst du ($i=1;$i<=3;$i++) oder ($i=0;$i<3;$i++). Dann sollte es gehen.

    {

    »»     $daten++;
    »»     $hantel++;
    »»     $zaehler++;
    »»     open($hantel, ">$daten$index")
    »»     print $hantel "Hallo $zaehler";
    »»     close($hantel);

    }

  2. Hallo!

    ....
    for($i=0;$i<=3;$i++)
    {
        $daten++;
        $hantel++;
        $zaehler++;
        open($hantel, ">$daten$index")
        print $hantel "Hallo $zaehler";
        close($hantel);
    }

    Wie schon Erik meinte - so geht die Schleife von i=0..3 also 0,1,2,3 = 4 Durchläufe. Aber noch etwas anderes: Warum nimmst Du eine Variable ($hantel) als Dateihandle - ist imho ein ziemlich ungewöhnliches Konstrukt?! Da Du ja innerhalb der Schleife die Datei jedesmal neu öffnest, hineinschreibst und wieder schließt, reicht eigentlich ein einziger Dateihandle dazu aus. Also:

    open(DATEI ">$daten$index");
      print DATEI "...";
      close(DATEI);

    Viele Grüße

    Andreas

  3. Hi,

    for($i=0;$i<=3;$i++)
    {
        $daten++;
        $hantel++;
        $zaehler++;
        open($hantel, ">$daten$index")
        print $hantel "Hallo $zaehler";
        close($hantel);
    }

    das Script erstellt ganz korrekt die vier Dateien ($i=0) 1.txt, ($i=1) 2.txt, ($i=2) 3.txt und ($i=3) 4.txt. Aber was soll "open($hantel...)"? Da solltest Du lieber einen festen Handler nehmen, und zwar üblicherweise einen in Großbuchstaben. Ich bin mir absolut nicht sicher, ob das sonst nicht zu Fehlern führen kann... dafür kann man einen mit close() geschlossenen Handler problemlos wiederverwenden.

    Cheatah