"non-Array variable" und trotzdem ein Array?

  • Hy Leute,

    Ich hab leider ein kleines Problem mit der Ausgabe von Ordnernamen und ich gebe Testweise die Ergebnisse mit einer Msg-Box aus. Hierbei sagt Autoit aber dass es sich bei dem auszugebenden um ein nicht-Array handelt. Das Problem ist, wenn ich einfach [0] schreibe, wird TROTZDEM das richtige ausgegeben, allerdings aber das Programm abgebrochen. Wenn ich es als normale Variable benutze, wird nur ein Leerer String zurückgegeben, was ja nicht das eigentliche Ergebnis ist ;)

    Das ganze sieht folgendermaßen aus:
    Ich lese eine Reihe Ordner ein und bestimme deren Größe. Danach lese ich die Unterordner ein.
    Alles soll später in ein einzelnes Array geschrieben werdn, aber das ist nicht so wichtig.

    Also höchstens ein Unterordner:
    Ordner 1
    - Unterordner 1
    - Unterordner 2
    - Unterordner 3


    [autoit]


    Dim $FileList[90][10][3]
    _GetListOfFiles("U:\Data")

    [/autoit][autoit][/autoit][autoit]

    Func _GetListOfFiles($Dirtosub)
    $FileListnames = _FileListToArray($Dirtosub,"*",2)
    If @Error=1 Then
    MsgBox (0,"","No Folders Found.")
    Exit
    EndIf

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To UBound($FileListnames)-1
    $FileList[$i][0][0]= $FileListnames[$i] ;schreibe Namen in Array
    $Dir = DirGetSize($Dirtosub & "\" & $FileListnames[$i]) ;Hole Ordnergrößen
    $FileList[$i][0][1]= $Dir/1024/1024/1024 ;Schreibe Ordnergrößen in Array (GB)
    ;----------------------- ?
    $Filelistnamesub = _FileListToArray($Dirtosub & "\" & $FileListnames[$i],"*",2)
    MsgBox(0,"",$Filelistnamesub[1]) ;(63) : ==> Subscript used with non-Array variable.
    If $i > 1 Then Exit;Test
    Next
    EndFunc

    [/autoit]

    Soweit funktioniert alles, nur nimmer er die Variable $Filelistnamesub nicht als Array an?! Wenn mir das jemand erklären könnte wär ich sehr dankbar :)

    Einmal editiert, zuletzt von Metzlmane (2. September 2009 um 11:01)

  • Ja ok ich habe mich glaub ich bisschen falsch ausgedrückt ^^

    Es Gibt schon mehrere Unterordner, nur besitzen dies Unterordner keine Unterordner mehr ..^^

    Das Problem ist, wenn ich

    [autoit]


    $Filelistnamesub[0]

    [/autoit]


    Dann kommt auch die Zahl 3 in der Msg-Box, nur bricht er danach ab.

    Edit:

    Ok du hattest schon recht, ich hatte nur Tomaten auf den Augen :)

    Funktioniert alles einwandfrei, auch wenn in jedem Ordner nur 1 Unterordner vorhanden ist.
    Es ging nur nicht, weil im 2. Ordner den ich zum Test erstellt hatte gar kein Unterordner war und die If-Abfrage diesen ja noch mitgelesen hat.

    Danke!

    Einmal editiert, zuletzt von Metzlmane (2. September 2009 um 11:00)

  • Hallo,
    geh das "Problem" mal allgemeiner an!
    Du willst den Rückgabewert einer Funktion per Msgbox darstellen. Die Funktion KANN aber mehrere Werte zurückgeben, sowohl Arrays, als auch "normale" Variablen, aber auch im schlimmsten Fall irgendwelche undefinierten Zustände! Weiterhin sollte man nach dem Ausführen der Funktion auch @Error auswerten. Wie ein Überaschungsei, 3 Sachen auf einmal^^
    Also
    1.) @Error auswerten, das gibt Hinweise auf Erfolg/Mißerfolg. Dementsprechende Info per Ctrl-Shift-D (in Scite für die Debug Messagebox) oder Alt-D für die Ausgabe der Info in die Console
    2.) Wenn nicht klar ist, ob die Funktion ein Array oder eine Variable zurückgibt, einfach die Rückgabe TESTEN, z.B. per

    [autoit]

    isarray() oder isstring() oder oder oder

    [/autoit]


    3.) Wenn Array, dann bietet sich eine Ausgabe per

    [autoit]

    _arraydisplay()

    [/autoit]

    an