Array2D Problem

  • Moin,

    Spoiler anzeigen

    #include <Array.au3>

    Local $aArray

    Local $aArray_Base[3][3] = [["Wert 1", "Wert 2", "Wert 3"], ["10", "20", "30"],["40", "50", "60"]]

    _ArrayDisplay($aArray_Base, "2D array")


    Dieses 2D Array mit mehreren Spalten soll in einer Schleife geändert werden, so dass jeweils ein 2D Array mit zwei Spalten entsteht.

    Wobei in Col0 immer Wert1, Wert2, Wert3 steht.

    Die Schleife ist kein Problem, aber das Array.


    1. Arrray:

    Col0 Col1

    Row0 Wert1 10

    Row1 Wert2 20

    Row2 Wert3 30


    2. Arrray:

    Col0 Col1

    Row0 Wert1 40

    Row1 Wert2 50

    Row2 Wert3 60


    Könnt ihr mir helfen?:)

    Gruß

  • BugFix , das Ausgangsarray hat 38 Zeilen und 25 Spalten !

    Ich möchte in einer Schleife alle 38 Zeilen, Zeile für Zeile lesen und die Daten der 25 Spalten in ein 2D Array mit zwei Spalten befüllen, so wie oben am Beispiel beschrieben.

    Wobei die 1. Zeile vom Ausgangsarray immer gleich ist. Sie soll dann in der ersten Spalte des neuen 2D Array stehen. Also würde dann 25 Zeilen ergeben.

    Das obige Beispiel wäre das Ausgangsarray, hier allerdings nur mit 3 Zeilen und 3 Spalten dargestellt

  • Hallo wuff100

    Deine Frage bezieht sich also eigentlich darauf, wie man eine Zeile (du meinst alle Elemente darin) eines Arrays einliest? Das geht nicht - immer Element für Element.
    Es ist also ganz profan. Du baust eine verschachtelte Schleife, in der das Ausgangs-Array Zeile für Zeile durchgegangen wird und darin eine Schleife, die dann jeweils alle Elemente in der Zeile durchgeht und die Werte (verkettet etwa &= ";" & $aArray[$ii][$i]) in die zweite Spalte der entsprechenden Zeile im Zielarray zuweist.

    Grüße autoiter

    • Offizieller Beitrag

    wuff100

    Du versuchst das Problem zu verallgemeinern, mit einem Lösungsgedanken, der dir vorschwebt.

    Einfacher und für uns verständlicher ist aber, wenn du einen Satz Daten einstellst und sagst: Das ist die Ausgangslage und dann stellst du einen zweiten Satz Daten ein, mit dem gewünschten Ergebnis.

    Momentan ist das Kaffesatzleserei.

  • Ich hab den Kaffesatz mal aufgegossen:

    Das Skript liefert mit den gegebenenDaten das gewünschte Ergebnis. Ob der Aufguss auch stark genug für grössere Datenmengen ist musst du selbst austesten. Das Zwischenpeichern der UBound Dimensionen geschieht aus Performancegründen

    mfg (auto)Bert

  • Tschuldige. Ich denke mal es ist einfach zu heiß. Du brauchst kein Dim. Eigentlich brauchst du das ReDim ja auch nur, weil du die Variable $aTMP (unnötigerweise) am Anfang deklarierst / wo auch noch das nicht benutzte $aArray steht.
    Hauptsache ist aber, dass es sich hier gar nicht um flexible Werte handelt.

    ReDim $aTMP[$imCol][2] ist immer gleich groß. Es ist immer $aTMP[UBound($aArray_Base, 2)][2]. Oder sehe ich das falsch? Wenn nicht, ist es ein Fehler, das in die Schleife zu packen. Es muss nur einmal ausgeführt werden.

    Grüße autoiter

  • vielen Dank, Du hast den Kaffeesatz hervorragend aufgegossen und verstanden! ;)

    Danke, aber da auch

    Hauptsache ist aber, dass es sich hier gar nicht um flexible Werte handelt.

    ReDim $aTMP[$imCol][2] ist immer gleich groß. Es ist immer $aTMP[UBound($aArray_Base, 2)][2]. Oder sehe ich das falsch? Wenn nicht, ist es ein Fehler, das in die Schleife zu packen. Es muss nur einmal ausgeführt werden.

    Recht hat kannst du noch zu

    abändern, bingt noch einnige milliSekunden.

    mfg (auto)Bert

    Einmal editiert, zuletzt von autoBert (26. Juli 2019 um 17:46)