Syntax error

  • Hi!

    Ich habe diesen Quellcode:

    [autoit]

    Global $a_level_1[6][2] = [[76, 67, 58, 57, 56, 55], [0, 0, 0, 0, 0, 0]]
    Global $a_level_2[10][2] = [[73, 64, 65, 66, 67, 68, 69, 70, 61, 62], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
    Global $a_level_3[8][2] = [[79, 70, 69, 60, 59, 50, 49, 40], [0, 0, 0, 0, 0, 0, 0, 0]]
    Global $a_level_4[15][2] = [[72, 63, 54, 45, 36, 27, 18, 9, 0, 1, 2, 11, 20, 21, 22], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
    Global $a_level_5[16][2] = [[80, 71, 62, 53, 44, 43, 42, 41, 40, 39, 38, 37, 46, 55, 64, 63], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
    Global $a_level_6[19][2] = [[76, 67, 58, 49, 40, 31, 22, 13, 4, 5, 6, 15, 24, 25, 26, 35, 44, 43, 42], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
    Global $a_level_7[10][2] = [[78, 69, 68, 67, 58, 49, 50, 51, 52, 61], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

    [/autoit]

    Wenn ich einen Syntax-Check per Ctrl+F5 mache, kommt keine Fehlermeldung. Wenn ich aber das Skript starte, kommt die Fehlermeldung

    Code
    C:\Users\Admin\Desktop\asd\asd.au3 (1) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    Global $a_level_1[6][2] = [[76, 67, 58, 57, 56, 55], [0, 0, 0, 0, 0, 0]]
    Global $a_level_1[6][2] = [[76, 67, ^ ERROR

    Ich bin verwirrt ?(

    Einmal editiert, zuletzt von pete_gzome (7. Juni 2012 um 19:48)

  • [autoit]

    Global $a_level_1[6][2] = [[76, 67], [58, 57], [56, 55], [0, 0], [0, 0], [0, 0]]
    ; usw...
    ; oder aber so
    Global $a_level_1[2][6] = [[76, 67, 58, 57, 56, 55], [0, 0, 0, 0, 0, 0]]

    [/autoit]
  • Ach, oops, wie peinlich :/

    Aber wieso kommt die Fehlermeldung nicht schon beim Syntax-Check?

  • Weil das kein Syntax Fehler ist... Das könnte man als falsche Adressierung eines Datenspeichers klassifizieren. Aber es ist kein Syntax Fehler.
    Das hier ist auch völlig korrekt von der Syntax her: MsgBox(0, "", $Test)
    Aber bei der Ausführung wird trotzdem ein Error angezeigt, weil die Variable nicht existiert. ;)

  • Stimmt, danke :)

    Ich habe noch eine andere kleine Frage:

    Normalerweise benutze ich immer UBound($array). Da ich aber jetzt z.B. $a_level_1[2][6] statt $a_level_1[6][2] habe, wird logischerweise immer 2 zurückgegeben (statt der immer variierenden Anzahl).

    Wie kann ich jetzt über UBound die variierende Anzahl der Werte in den Arrays herausfinden?

  • Ich zitier mal die Hilfe:

    Zitat

    Array Das Array dessen Größe ermittelt werden soll.
    Dimension [optional] Die Dimension des Arrays dessen Größe ermittelt werden soll. Der Standard ist 1, dies ist die Erste Dimension. Falls dieser Parameter 0 ist, wird die Anzahl der Dimensionen des Arrays zurückgegeben.

    Heisst also in deinem Fall:

    [autoit]

    Ubound($aArray,2) ; um die 2. Dimension des Arrays zu erhalten

    [/autoit]

    Gruß

    UNPLEASANT SPOILER

    You just lost the game!