For-To-Next Schleifen-Problem

  • Hallo zusammen! Ich bin gerade dabei ein Skript zu schreiben, die Variablen darin sind Global, weil sie später gebraucht werden.


    Spoiler anzeigen

    Func OnAutoItStart()
    Global $Anzahl, $oIE, $oform, $ologin, $opassword, $oSelect, $de, $i
    $Anzahl = IniRead("Daten.ini", "Welten", "Anzahl", 0)
    $Anzahl += 1
    Global $Welt[$Anzahl], $Pfad[$Anzahl]
    For $i = 1 To $Anzahl
    $Welt[$i] = IniRead("Daten.ini", "Welten", $i, 0)
    $Pfad[$i] = IniRead("Daten.ini", $i, "Pfad", 0)
    $Pfad[$i] = $Pfad[$i] & ".ini"
    Next
    MsgBox(0, "", "ok")
    EndFunc

    Problem nur, alles nach der Schleife wird nicht ausgeführt. Ich habe es schon mit

    [autoit]

    If $i = $anzahl Then ExitLoop

    [/autoit]

    oder einer Funktion, aber nichts hat funktioniert. Was kann ich nun tun?? ?(

    2 Mal editiert, zuletzt von MatthiasG. (5. November 2008 um 18:24)

  • [autoit]

    Global $Anzahl, $oIE, $oform, $ologin, $opassword, $oSelect, $de, $i <--
    ...
    For $i = 1 To $Anzahl

    [/autoit]

    AFAIK muss die Zählvariable lokal sein, da du $i schon global vergeben hast, könnte das das Problem sein.
    Versuch doch einfach mal 'ne andere Zählvariable, außerhalb der For-Next-Schleife kannst du ja sowieso nicht drauf zu greifen.

    CU Ashpool

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

  • [autoit]

    For $i = 1 To $Anzahl

    [/autoit]

    ist falsch, da $Anzahl = UBound ist. Du kannst aber nur bis UBound -1 adressieren.
    Richtig:

    [autoit]

    For $i = 1 To $Anzahl -1

    [/autoit]


    Danke erstmal für die schnellen Antworten ^^

    Aber eine Frage hätte ich noch: Was heißt UBond genau? Ich weiß, die Frage ist vllt. ein bisschen blöd ;( , aber ich bin leider noch blutiger Anfänger... Das mit der Zählervariable war wirklich ein blöder Fehler von mir. Ich benutze aber immer die Funktion MustDeclareVars(), nervt zwar, rettet aber vor machen Fehlern...


    Mit freundlichen Grüßen,

    MatthiasG.

  • BugFix

    Heisst das, dass die Zählvariable nicht lokal sein muss? In allen anderen Programmiersprachen (die ich kenne), ist das so.
    Und in der AutoIt-Hilfe hab ich auch was zum Thema gefunden:

    "The Variable will be created automatically with a LOCAL scope, even when MustDeclareVars is on."

    Oder verstehe ich da was völlig falsch?

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

    • Offizieller Beitrag

    Die Zählervariable ist von Haus aus als Local deklariert. Sie braucht also nicht extra deklariert werden.
    UBound ist die Obergrenze des Array, also die Anzahl der Elemente. Da mit Index 0 für das erste Element adressiert wird, hat das letzte Element den Index UBound-1.

    Lies mal mein Tut - Signatur.

  • Lies mal mein Tut - Signatur.

    Hab ich, leuchtet mir auch ein und ist mir auch aus anderen Sprachen geläufig.
    Aber trotzdem: wenn ich einen Variablenbezeichner $i global verwende, kommt es dann nicht zu Problemen, wenn ich genau diesen Bezeichner auch in einer For-Schleife verwende, wo ja die Variable $i lokal angelegt wird? Verwaltet AutoIt diese beiden Variablen mit gleichem Namen etwa getrennt?

    Gruß Ashpool

    Zitat von mir

    Bin immer wieder erstaunt, wie begrenzt ein Horizont sein kann.

  • Leider funktionierts immer noch nicht. Aber ich mache das jetzt über StringSplit(), das geht auch! Danke! :thumbup: