multidimensionale arrays

  • ich versteh einfach nicht wo der fehler liegt

    Code
    "Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    MsgBox(0,"blub","echo: " & $array[$pos[1]][$pos[2]])
    MsgBox(0,"blub","echo: " & ^ ERROR"


    das ist der code:


    und das der inhalt der cvs:

    Code
    a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p
    a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p
    a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p
    a,b,c,d,e,f,g,h,i,j,z,l,m,n,o,p
    a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p

    eigentlich sollte die ganze datei in eine array packen und dann darin per anderem array was auslesen und in der msgbox ausgeben was eignetlich das z seien sollte.
    die _ArrayDisplay gehen nur halt das letzte nicht

    Einmal editiert, zuletzt von diepfeile (9. April 2009 um 18:33)

    • Offizieller Beitrag
    [autoit]

    $array[$i] = StringSplit($array[$i], ",") ; <== speichert ein Array im Array
    ; kann nur so gelesen werden:
    $tmp = $array[$i]
    MsgBox(0,"blub","echo: " & $tmp[1] & $tmp[2])

    [/autoit]

    Ich hab dazu auch mal Funktionen erstellt um Werte aus einem Array im Array zu lesen/schreiben. Findest du in der ArrayMore.au3


  • wenn ich die arrays schritt für schritt auslese gehts.
    aber das sollte doch auch direkt gehen laut bsps:


    da gehts doch auch mit dem direkten auslesen von mehrdimensionalen arrays.
    auch bei http://wiki.autoit.de/ siehts es so aus als ob es gehen würde:

    C
    #Include <GuiListView.au3>
    #include <Array.au3>
    
    
    For $i = 0 To UBound($array,1) -1  	; $i = Element 1 (Index=0) bis Zeilen (Index= Zeilen -1)
    	For $k = 0 To 3  		; $k Spalten-Index (im Array und im ListView-Control)
    		_GUICtrlListViewInsertItem ($listview, $k, $array[$i][$k])
    	Next
    Next

    sogar bei


    kommt:

    Code
    : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    MsgBox(0,"blub","echo: " & $array[4][11])
    MsgBox(0,"blub","echo: " & ^ ERROR


    aber bei _ArrayDisplay( $array[4], "Whole array" ) wird es doch richtig anzeigt somit muss es doch ein mehrdimensionales array sein.

    Einmal editiert, zuletzt von diepfeile (9. April 2009 um 20:13)

    • Offizieller Beitrag
    [autoit]

    Global $array[3] ; Eine Dimension, 3 Elemente
    ; hier mal mit einem Array aus 5 Elementen und Strings als Elementen
    Global $array[3] = [[1,2,3,4,5], "A", "B"]

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

    Global $array[2][4] ; Zwei Dimensionen, 2 "Zeilen" - 4 "Spalten"

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

    ; für dein Bsp.
    Global $arBasic, $arSplit[1][2], $arTmp
    _FileReadToArray($sFilePath, $arBasic)
    For $i = 1 To UBound($arBasic) -1
    $arTmp = StringSplit($arBasic[$i], ',', 2)
    If UBound($arTmp,2) > UBound($arSplit,2) Then ReDim $arSplit[UBound($arSplit)][UBound($arTmp,2)]
    If $arSplit[UBound($arSplit)-1][0] <> '' Then ReDim $arSplit[UBound($arSplit)+1][UBound($arSplit,2)]
    For $i = 0 To UBound($arTmp,2) -1
    $arSplit[UBound($arSplit)-1][$i] = $arTmp[$i]
    Next
    Next
    _ArrayDisplay($arSplit)

    [/autoit]
  • Kleine Info: Zeile 3 funktioniert so nicht, das Array muss man zuvor erstellen:

    [autoit]

    ; hier mal mit einem Array aus 5 Elementen und Strings als Elementen
    Dim $internesArray[5] = [1,2,3,4,5]
    Global $array[3] = [$internesArray, "A", "B"]

    [/autoit]
  • danke für deine mühen BugFix. aber ich werd beim array im array bleiben. bringt ja nichts mit haufenweise code das array im array in ein multidimensionales zu verwandeln nur weil man eine zeile sparen will. zudem weiss ich jetzt ja, dass es zwischen den beiden einen unterschied gibt den man beim auslesen berücksichtigen muss