mehrdimensionales array -> einfügen klappt nicht

  • hi leute,

    also ich hab ein mehrdimensionales array

    global $test[1][1]

    so jetzt möchte ich da was hinzufügen

    _ArrayAdd($test, $felda[k], $text)


    wieso funktioniert das nicht?

    Einmal editiert, zuletzt von holzfelix (20. Dezember 2012 um 09:09)

  • _ArrayAdd arbeitet nicht mit mehrdimensionalen Arrays.
    Lass dir den Errorcode (@error) zurückgeben, du wirst "2" erhalten. Ein Blick in die Hilfe sagt uns:

    Zitat

    2 - $avArray is not a 1 dimensional array

    Außerdem: Wieso übergibst du einer Funktion, die 2 Parameter erwartet, 3?

    lg chess

  • Probier's mal so:

    [autoit]


    Func _ArrayAdd2DLine(ByRef $avArray, $avValue)
    ;chesstiger
    If Not IsArray($avArray) Or Not IsArray($avValue) Then Return SetError(1, 0, -1)
    If UBound($avArray, 0) <> 2 Then Return SetError(2, 0, -1)
    If UBound($avArray, 2) <> UBound($avValue, 1) Then Return SetError(3, 0, -1)

    Local $iUBound1D = UBound($avArray, 1)
    Local $iUBound2D = UBound($avArray, 2)
    ReDim $avArray[$iUBound1D + 1][$iUBound2D]
    For $i = 0 To $iUBound2D - 1
    $avArray[$iUBound1D][$i] = $avValue[$i]
    Next
    Return True
    EndFunc ;==>_ArrayAdd2DLine

    [/autoit]

    Kannst du dann halt so anwenden:

    [autoit]


    #include <Array.au3>

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

    Local $aArray[2][2] = [[0,1],[2,3]]
    _ArrayDisplay($aArray)
    Local $aAdd[2] = [4,5]
    _ArrayAdd2DLine($aArray, $aAdd)
    _ArrayDisplay($aArray)

    [/autoit]

    lg chess

  • Zitat von holzfelix


    gibts keine einfachere möglichkeit?


    Ein Funktionsaufruf und eine vorherige Array-Deklaration findest du schwer?

    Aber gut, will ich die Frage mal beantworten:
    Ja, es geht einfacher.

    Greif manuell auf das Array zu.

    [autoit]


    #include <Array.au3>
    ;Array erstellen
    Local $avArray[5][2] = [[0,1],[2,3],[4,5],[6,7],[8,9]]

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

    ;Array in der Größe verändern (1. Dimension um eins vergrößern)
    ReDim $avArray[6][2]

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

    ;Neue Spalte füllen
    $avArray[5][0] = "Erster neuer Wert"
    $avArray[5][1] = "Zweiter neuer Wert"

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

    ;Array anschauen
    _ArrayDisplay($avArray)

    [/autoit]

    Dafür muss man aber schon mit Arrays vertraut sein, und das schien mir bei dir nicht der Fall zu sein.

    lg chess

  • also bei mir sieht das so aus:


    [autoit]

    if $String[UBound($String)-1] > 0 Then
    MsgBox(1,"Bugs","Bugs"& $String[UBound($String)-1])

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

    $arraysize = UBound($bugListe)+1
    ReDim $bugListe[$arraysize][1]

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

    $bugListe[$arraysize][0] = $pdfListe[$k]
    $bugListe[$arraysize][1] = $String[UBound($String)-1]

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

    Else
    MsgBox(1, "keine Bugs", "Bugs")
    EndIf

    [/autoit]


    es bringt aber einen fehler die MsgBox wird noch ausgeführt und dann gibts en error

  • Jup. Nehmen wir an, dein Array $bugListe hat die Maße 5x2 (Also Dim $bugListe[5][2]).
    Dann ist das letzte Element nicht $bugListe[5][2], sondern $bugListe[4][1], weil Arrays bei 0 anfangen zu zählen.
    Dein Code müsste so aussehen:

    [autoit]


    $arraysize = UBound($bugListe)
    ReDim $bugListe[$arraysize + 1][1]

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

    $bugListe[$arraysize][0] = $pdfListe[$k]
    $bugListe[$arraysize][1] = $String[UBound($String)-1]

    [/autoit]

    lg chess

  • du hast doch absolut nichts verändert

    nur das +1 verschoben und das sollte ja wurst sein wos addiert wird

    und ja ich weiß dass arrays bei 0 beginnen den fehler hab ich ja auch nirgends gemacht

  • doch du hast recht hab geblickt


    aber es kommt in dieser zeile:

    [autoit]

    $bugListe[$arraysize][1] = $String[UBound($String)-1]

    [/autoit]


    immer noch zum fehler

    2 Mal editiert, zuletzt von holzfelix (18. Dezember 2012 um 14:47)