Hannes: Wie schreibt man eine Schleife mit Befehlen, die sich 500 mal wiederholen soll?

Hey Leute! ;-)

Ich brauche eure Hilfe. Ich muss eine Schleife schreiben, in der bestimmte Befehle stehen (öffnen von Dateien, etwas in eine Datei reinschreiben und wieder schließen u.v.m). Diese Schleife soll genau 500 mal ausgeführt werden. Aber leider hab ich keine große Ahnung wie ich so'ne Schleife hinkrieg. Die Befehle die ich dareinschreiben will, kenn ich aber schon. Ich brauch halt nur ne Lösung wie ich die Befehle 500 mal ausführen kann. Wer könnte mir da helfen! :-)

Ciao

Hannes

  1. Hallo Hannes,

    [...]

    Diese Schleife soll genau 500 mal ausgeführt werden.
    Aber leider hab ich keine große Ahnung wie ich so'ne Schleife hinkrieg.
    Die Befehle die ich dareinschreiben will, kenn ich aber schon. [...]

    Hä, die Befehle für innerhalb der Schleife kennst Du schon, aber die grundlegensten Anweisungen der mir unbekannten Programmiersprache kennst Du nicht? :-)
    Wie wäre es mit einem Buch oder einem Online-Tutorial. Imho wird dort sowas innerhalb der ersten Kapitel abgehandelt, und sollte Dir zur Lösung verhelfen.

    Gruß AlexBausW

    Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html

    1. danke, aber kannst du mir das nochmal kurz sagen wie das geht?
      muss ich das so schreiben:

      #!/usr/bin/perl
      for (i=0;i<=(2000/8*2);i++);
      und dann hier die befehle

      oder wie soll das gehen? die befehle hab ich aus nem anderen skript, nicht das ihr denkt ich könnte Perl! *fg*
      Diese Befehle sind auch nicht immer die gleichen, da ich da son counter reinbringen will, der immer ne zahl erhöht (das weiss ich auch wie das geht)

      1. Hallo Alex!

        Irgendwie scheinen Deine Klammern mit Dir durchzugehen ;-)

        Also so schlimm ist es ja nun auch wieder nicht: eine while-Schleife mit zwei if-statements. Ist das soviel ?

        Entweder hast Du die schließende Klammer der Subroutine nicht
        kopiert.

        sorry, stimmt! Hab ich glatt vergessen, das kleine Klämmerchen ;-)
        so schaut's aus:

        sub getStaff {

        »»   open [...]
        »»   while () {
        »»     if (){
        »»       if () {}
        »»     }
        »»   }
        »»   close [...]

        }

        Hoffentlich stinkt es nicht mehr so, wenn Du das nochmal
        überprüft hast.

        *schnüffel, schnüffel* -verdammt, es stinkt noch immer :-(

        liebe Grüsse
        Bernhard

        1. Hallo Bernhard,

          sub getStaff {
          »»   open [...]
          »»   while () {
          »»     if (){
          »»       if () {}
          »»     }
          »»   }
          »»   close [...]
          }

          So klappt`s auch mit der Nachbarin ;-)

          Lass Dir doch einfach mal in der If-Bedingung $ansprechpartner_text an den Browser ausgeben. Dann siehst Du wann und wie oft Deine Bedingung erfüllt ist. Wenn Du in der While-Schleife noch einen Zähler ausgibst, kanns Du auch genau den Durchlauf sehen, bei dem Deine Bedingung zutrifft.
          Zusätzlich könntest du das Skript als .txt online stellen, damit man auch das Drumherum ein wenig begutachten kann ;-)

          Gruß AlexBausW

          Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html

          1. Hi Alex

            Lass Dir doch einfach mal in der If-Bedingung
            $ansprechpartner_text an den Browser ausgeben. Dann siehst Du
            wann und wie oft Deine Bedingung erfüllt ist. Wenn Du in der
            While-Schleife noch einen Zähler ausgibst, kanns Du auch genau
            den Durchlauf sehen, bei dem Deine Bedingung zutrifft.

            Es wird nicht direkt am Bildschirm ausgegeben, sondern erst in eine Datei verfrachtet, und von dort auf Befehl wieder abgeholt und an den Browser geschickt ;-)

            Aber ich habs probiert, ich habs halt nicht auf den Browser ausgegeben sondern in eine Datei! Hier mal das Script:

            open (GET_STAFF, "akademie.info") die "can't open akademie.info: $!\n";
            while ($line=<GET_STAFF>) {
              $willi++;
              chomp($line);
              ($staff_id, $staff_name, $staff_aufgaben, $staff_tel, $staff_fax, $staff_email, $dummy) = split(/::/,$line);

            open (CHECK, ">>check.txt");
              print CHECK "Loop $willi:$staff_id:";
              if ($staff_id eq $lva_ansprechpartner1 $staff_id eq $lva_ansprechpartner2) {
                $ansprechpartner_text .= "<p>\n".$staff_name." <!--".$staff_id."-->\n";
                $ansprechpartner_text .= "<br>Tel: +43/1/815 08 50 DW ".$staff_tel."\n";
                if ($staff_fax) { $ansprechpartner_text .= "<br>Fax: +43/1/815 08 50 DW ".$staff_fax."\n";}
                $ansprechpartner_text .= "<br>E-mail: <a href='mailto:".$staff_email."'>".$staff_email."</a></p>";
                print CHECK "match $staff_id";
              }
              print CHECK "\n";
              close (CHECK);
            }
            close (GET_STAFF) die "can't close akademie.info: $!\n";

            Und das ist der Inhalt der Datei:

            Loop 1:staff10:
            Loop 2:staff11:
            Loop 3:staff12:
            Loop 4:staff13:
            Loop 5:staff14:
            Loop 6:staff15:match staff15
            Loop 7:staff16:
            Loop 8:staff17:
            Loop 9:staff18:
            Loop 10:staff19:
            Loop 11:staff20:
            Loop 12:staff21:

            Der zweite match ($lva_ansprechpartner1) hätte bei staff17 sein sollen! Ab loop 6 wird als $ansprechpartner_text immer dasselbe ausgegeben! Hab es auch schon mit anderen Kominiationen probiert, immer das gleiche Ergebnis :-(

            Zusätzlich könntest du das Skript als .txt online stellen, damit
            man auch das Drumherum ein wenig begutachten kann ;-)

            Gern,

            Script, welches den Inhalt des Formulars in die Datei niederschreibt:
            http://www.wt-akademie.at/schreibeDetail.pl.txt

            Ich stell auch gleich mal das Formularscript rein, also das Script,
            welches das Formular ausgibt welches an das verhexte Script geschickt wird:
            http://www.wt-akademie.at/zeigeDetail.pl.txt

            liebe Grüsse,
            Bernhard

      2. Liebes Forum-Team

        Die untenstehende Antwort von Martin auf Hannes' Beitrag hat denselben Dateinamen wie ein weiter unten von mir geposteter:
        <111648.html>

        Ist das nur bei mir so, und PERL macht mich wirklich schön langsam weich im Hirn, oder hier hier ist was faul ;-)

        liebe Grüsse
        Bernhard

        1. Hallo Bernhard

          Das passiert manchmal, wenn beide Postings zum exakt den gleichen Zeitpunkt abgeschickt werden!

          MfG
          Roman Sonnleithner alias Sonny
          http://www.atomic-eggs.com/selfspezial/daten/119.html

          1. Hi!

            Das passiert manchmal, wenn beide Postings zum exakt den gleichen Zeitpunkt abgeschickt werden!

            Wohl Synchronisationsprobleme wie :->
            *grins*

            grüsse
            bernhard

      3. Ich nochmal - nachdem mir hier andere Aussagen untergejubelt werden ;-))

        #!/usr/bin/perl
        for (i=0;i<=(2000/8*2);i++);

        Das war ein S C H E R Z!!

        Ich nehme an, dass Du selbst bei erfolgreicher Umsetzung der Schleife sehr bald auf 100 andere Probleme treffen wirst (insbesondere, wenn ich an "Dateien Öffnen/Einlesen/Verändern/Speichern" denke!!).

        Gut gemeint: Beherzige die Ratschläge der anderen und lies
        z u e r s t ein Buch/Tutorial - ansonsten lasse es besser sein.

        Grüße,
        Martin

      4. danke, aber kannst du mir das nochmal kurz sagen wie das geht?
        muss ich das so schreiben:

        #!/usr/bin/perl
        for (i=0;i<=(2000/8*2);i++);
        und dann hier die befehle

        for (0..499) {
          # hier die Befehle
        }

        Peter

  2. Hallo Hannes,

    [...]

    Diese Schleife soll genau 500 mal ausgeführt werden.
    Aber leider hab ich keine große Ahnung wie ich so'ne Schleife hinkrieg.
    Die Befehle die ich dareinschreiben will, kenn ich aber schon. [...]

    Hä, die Befehle für innerhalb der Schleife kennst Du schon, aber die grundlegensten Anweisungen der mir unbekannten Programmiersprache kennst Du nicht? :-)
    Wie wäre es mit einem Buch oder einem Online-Tutorial. Imho wird dort sowas innerhalb der ersten Kapitel abgehandelt, und sollte Dir zur Lösung verhelfen.

    Gruß AlexBausW

    Please visit my SELFvisitingcard @ http://www.atomic-eggs.com/selfspezial/daten/150.html

  3. Hi!

    Du hast keine Ahnung was ne Schleife ist, weisst aber dass du eine "Schleife" brauchst ??? Naja, was solls!

    Wenn du mit Perl arbeitest ist eine der tausend Möglichkeiten die:

    for ($i=0; $i<500; $i++) {
    ... deine Befehle ...
    }

    Du setzt die Variable $i auf 0, wiederholst alles was zeischen den geschwungenen Klammern steht solange bis $i kleiner als (!) 500 ist, und erhöhst bei jedem Schleifendurchlauf $i (mit $i++) um eins.

    Aber Vorsicht: Du beginnst bei Null zu zählen. Wenn du also <= 500 schreibst, dann wird die Schleife 501 mal ausgeführt ;-)

    Grüsse, Bernhard

    1. Hi!
      [...]
      for ($i=0; $i<500; $i++) {

      Du setzt die Variable $i auf 0, wiederholst alles was zeischen den geschwungenen Klammern steht solange bis $i kleiner als (!) 500 ist, und erhöhst bei jedem Schleifendurchlauf $i (mit $i++) um eins.

      Hallo,

      falsch, nicht
      solange bis $i kleiner als 500 ist, sondern
      solange $i kleiner als 500 ist.

      Andreas

  4. Hi...

    hier nun mal ein Lösungsvorschlag von mir für dein Perl-Problem:

    for (i=0; i<=500; i++) {
        Befehl1;
        Befehl2;
        Befehl3;
        ...
        Befehln;
    }

    Das mit dem
    for (i=0;i<=(2000/8*2);i++).....
    von Martin J. ist wohl eher ne Spielerei ;)

    Gruß,
    Martin

    1. <111632.html>