Error: Array Variable has incorrect Numer....

  • Heyho, ich hab ein Script, welches auf einen Zeitserver zugreift und dort die Zeitausliest, dieses habe ich hier gefunden:
    [ gelöst ] OnlineCheck und GetOnlineTime ...
    Dort der Beitrag von Oscar, vorletzter.

    Dieses benutze ich nun, da ich aber nicht das Datum, sondern nur die Zeit brauche, splitte ich das den return:

    [autoit]

    func zeit()
    $time = _TimeSync()
    $split1 = StringSplit($time," ")
    return ($split1[2])
    EndFunc

    [/autoit]


    der return von _TimeSync sieht so aus: 1900/01/01 00:00:00


    Dadurch habe ich nur noch die Zeit die ich brauche!

    Nun habe ich aber das Problem, dass mit manchmal diese fehlermeldung kommt:

    return($split1[2])
    return(^ERROR

    Error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.


    Die fehlermeldung kommt immer nach unterschiedlichen zeiten!
    mal direkt nach 2 sekunden, mal erst nach 10s oder auch mal erst nach 5 minuten...

    ich habe mich schon gefragt was es sein könnte und komme eig nur auf den Schluss das $Split1[2] leer ist bzw nicht existiert, da das Prog iwie nicht richtig splittet oder das Datum in nem falschem Format ankommt und so nicht gesplittet wird...

    Könnte es das Problem sein? oder ein anderes?
    und wenn es dies sein sollte, wie kann man das ändern?
    kann evtl wer das Programm von Oscar so verändern, dass nur noch die Zeit als return ausgegeben wird?
    bin noch ziemlich neu in Autoit und hab daher kp davon :D

  • Du musst prüfen, ob $split1 auch ein Array ist:

    [autoit]

    Func zeit()
    $time = _TimeSync()
    $split1 = StringSplit($time," ")
    If IsArray($split1) Then
    Return ($split1[2])
    Else
    Return False
    EndFunc

    [/autoit]


    Entsprechend musst du auch noch eine Fehlerabfrage im eigentlichen Skript machen, wo du die Funktion aufrufst.

    MfG

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

  • Okay danke, liegt es jetzt daran, das $time nicht richtig gesplitted wird oder liegt es daran das der return von _TimeSync nicht das richtige Format hat?
    Nur so interresehalber.

    • Offizieller Beitrag

    oder liegt es daran das der return von _TimeSync nicht das richtige Format hat?


    Habe mir die Funktion jetzt nicht angeschaut, aber erfahrungsgemäß funktioniert nicht jeder Abruf vom Timeserver, es gibt dann vermutlich Leerstrings statt des Timestrings. Sowas fängt man eigentlich mit entsprechender Überprüfung ab.

  • Achso, hab mir die funktion auch angeguckt und eig gedacht, da da schon die abfrage drin ist, aber danke!
    werde es nachher mal einbauen und dann sollte es funktionieren, danke!

  • Die Funktion _timesync() setzt @error und gibt einen leeren String zurück anstatt der Zeit, wenn es zu einem Fehler bei der eigentlichen Kommunikation mit dem Zeitserver kam.
    Du hast also zwei Möglichkeiten um einen Fehler abzufangen:

    [autoit]


    func zeit()
    $time = _TimeSync()
    if @error then return -1
    ; if $time = "" then return -1 ; oder eben so...
    $split1 = StringSplit($time," ")
    if $split1[0] < 2 then return -2 ; fängt Problem beim Split ab, wobei die Funktion von Oscar im Erfolgsfall aber denke ich immer einen fehlerfrei splitbaren String liefern sollte
    return ($split1[2])
    EndFunc

    [/autoit]

    Dort wo du deine Funktion zeit() aufrufst musst du aber ebenfalls prüfen ob ein Fehler zurückkam (hier beispielhaft eine negative Zahl) oder ob alles ok war. Ansonsten verursacht dein Script vielleicht an anderer Stelle ungewolltes Verhalten.