mehrdimensionales Array redimensionieren

  • VB6

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von shoy.

    mehrdimensionales Array redimensionieren

    Hallo zusammen

    ich habe ein Problem mit mehrdimensionalen Arrays, ich kann sie aus irgendeinem Grund nicht Redimensionieren. Also folgender code ergibt mir auf der letzten Zeile eine Errormessage:

    Dim mArray() As String
    ReDim mArray(0, 1)
    mArray(0, 0) = "test00"
    mArray(0, 1) = "test01"
    ReDim Preserve mArray(1, 1)

    was ist denn falsch daran? Ich hab halt keine erfahrung mit mehrdimensionalen Arrays aber mit eindimensionalen funktioniert die ReDim Preserve Funktion auch mehrfach.

    ahja fast hätt ichs vergessen die Fehlermeldung ist:

    subscript out of range

    Danke im voraus für die Hilfe

    edit: ok ich habe bereits eine Lösung gefunden:

    Dim mArray() As String
    ReDim mArray(1, 0)
    mArray(0, 0) = "test00"
    mArray(1, 0) = "test01"
    ReDim Preserve mArray(1, 1)

    also der unterschied ist, ich habe einfach die erste dimension mit der zweiten vertauscht.
    Dies ist zwar eine Lösung, das Problem besteht aber für mich immer noch... kann man denn nur die hinterste Dimension redimensionieren ? Wenn ja weshalb? hat es einen bestimmten Grund oder ist es einfach eine schwäche in VB?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „shoy“ ()

    Hallo shoy,

    du kannst auf diese Weise nur die letzte Dimension des Arrays anpassen.

    Gruß Markus

    EDIT:
    sorry ich hatte die Antwort eine Weile stehen lassen und nicht abgeschickt. Das ist eine Schwäche von VB, das sehe ich auch so.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „alchimist“ ()

    Über einen kleinen Umweg geht das schon:

    Quellcode

    1. Allgemeinteil:
    2. Private Type LongValue
    3. Value() as Long
    4. End Type
    5. Sub:
    6. Dim myArray() as LongValue
    7. Redim Preserve myArray(10)
    8. Redim Preserve myArray(5).Value(100)
    9. ....
    10. Redim Preserve myArray(18)
    11. Redim Preserve myArray(17).Value(12)

    Das Ganze ist viel variabler, da so jedes Teil von myArray beliebig (auch unterschiedlich) viele Elemente haben kann.
    Das laßt sich auch noch zig-dimensional weiterverzweigen und als Datentyp ändern.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Walli“ ()

    Es läßt sich immer etwas optimieren.

    myArray kann auch mal locker prophylaktisch bis 1000 vordimensioniert werden. Solange das Value-Feld nicht dimensioniert ist, frißt das kaum Brot. Du sparst aber eine Menge REDIM's (Zeit).
    Also - in gröberen Schritten 'vorwegdimensionieren'.
    Lasse eine Counter mitlaufen (anstelle von Ubound-Abfragen) für myArray und im Typen z.B. als .Count

    Wir programmieren hier z.T. auch in VB mathematisches Zeugs und diese Methode hat sich gegenüber verzweigten Klassen durchaus bewährt (Geschwindigkeit).