_ArrayExtract macht aus 1-dim Array ein 2-dim Array!?

  • Es gibt sicher eine passende Funktion oder einen simplen Weg, aber nachdem ich jetzt 1 Std. gesucht habe frage ich lieber:

    Code
    #include <Array.au3>
    Local $aArray1Dim [20]
    Local $aArray2Dim [20] [10]
    $aArray1Dim = _ArrayExtract($aArray2Dim, 0, 0 , -1, -1)
    _ArrayDisplay($aArray1Dim, "Array1" & "  Dimension: " & UBound($aArray1Dim,$UBOUND_DIMENSIONS) & _
        " Rows: " & UBound($aArray1Dim,$UBOUND_ROWS) & " Columns: " & UBound($aArray1Dim,$UBOUND_COLUMNS))

    _ArrayExtract macht aus meinem 1-dimensionalen Array $aArray1Dim ein 2-dimensionales Array. Lässt sich das verhindern mal abgesehen von der Zuweisung durch eine For-Schleife?

    :)

  • Lässt sich das verhindern

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Was soll denn herauskommen? Und was hast du für Inhalte?

    Was macht_ArrayExtract ?

    "Extracts an array from the specified element(s) of a 1D or 2D array"

    D. h. wenn du Arrays im Array hast, werden diese extrahiert.

    Ich möchte die erste Zeile aus $aArray2Dim in $aArray1Dim kopieren und $aArray1Dim soll dabei ein eindimensionales Array bleiben.

    Musashi:

    Danke für die schnelle Hilfe!

    Dein Script funktioniert, aber warum macht es einen Unterschied, ob da "UBound($aArray1Dim,$UBOUND_ROWS)-1" oder "0" steht? Der Ausdruck ist doch 0, aber mit 0 funktioniert es nicht!

    Und: ich brauche die erste Zeile, nicht die erste Spalte. Bekomme ich mit dem Script aber nicht hin. Irgendwie habe ich den Hintergrund wohl nicht verstanden. Könnte vorher ein

    _ArrayTranspose machen, aber es geht doch sicher auch mit $aArrayExtract?

    Und wenn wir gerade dabei sind und es Dir nichts ausmacht:

    Wie kann ich leere Einträge ( = " " oder = "" ) in der ersten Zeile von $Array2Dim rausfiltern, so dass $aArray1Dim nur nicht-leere Einträge enthält und auch Ubound entsprechend kleiner ist? Gibt es dafür auch eine einfache Methode? Kann ich mir mit _ArraySort vorstellen, aber geht's auch einfacher?

    :)

    • Offizieller Beitrag

    aber warum macht es einen Unterschied, ob da "UBound($aArray1Dim,$UBOUND_ROWS)-1" oder "0" steht?

    Ubound liefert die Anzahl der Elemente. Die Adressierung (Index) beginnt aber bei 0! Somit ist der letzte Index 1 kleiner als die Anzahl der Elemente (Ubound) - ergo: Ubound(..) -1

    ich brauche die erste Zeile, nicht die erste Spalte.

    Soll dann jeder Spaltenwert aus dieser "Zeile" als Einzelwert in das Array1D eingefügt werden?

    Wie kann ich leere Einträge ( = " " oder = "" ) in der ersten Zeile von $Array2Dim rausfiltern, so dass $aArray1Dim nur nicht-leere Einträge enthält und auch Ubound entsprechend kleiner ist?

    Beim Iterieren über die Einträge abfragen und ggf. verwerfen. Aber bevor du da ran gehst, lies bitte mein Array-Tut (Signatur). Dann sollte es für dich einfacher werden.

  • Wie kann ich leere Einträge ( = " " oder = "" ) in der ersten Zeile von $Array2Dim rausfiltern

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • If StringStripWS($aArray2Dim[$iRow][$i], 3) <> "" Then _ArrayAdd($aArray1Dim, $aArray2Dim[$iRow][$i])

    Kann man auch so prüfen:

    If StringReplace($aArray2Dim[$iRow][$i], ' ', '') <> "" Then _ArrayAdd($aArray1Dim, $aArray2Dim[$iRow][$i])

    oder so:

    If StringReplace($aArray2Dim[$iRow][$i], ' ', '') Then _ArrayAdd($aArray1Dim, $aArray2Dim[$iRow][$i])

    Bei StringStripWS reicht in dem Fall übrigens auch ein $STR_STRIPLEADING (1)...

    Einmal editiert, zuletzt von Bitnugger (9. Mai 2020 um 19:16)

  • Bei StringStripWS reicht in dem Fall übrigens auch ein $STR_STRIPLEADING (1)...

    Das ist mir kurz nach Absenden des Beitrages auch aufgefallen.

    Ist ein String leer, bzw. enthält er nur die ausgewiesenen Leerstellen (siehe Bemerkungen in der Hilfe), dann ist $STR_STRIPLEADING (1) + $STR_STRIPTRAILING (2) natürlich redundant.

    Als ich aber sah, dass Du noch an dem Thread arbeitest war ich mir zu 99% sicher, dass Du darauf hinweisen würdest und wollte Dir durch ein EDIT nicht die Pointe verderben. Kleiner Spaß in trüben Coronazeiten, den Du mir hoffentlich nicht übel nimmst :P.

    Um noch mal auf _ArrayExtract zurückzukommen :

    Extrahiert man aus einem 2D-Array eine Spalte, dann erhält man ein 1D-Array. Extrahiert man aber eine Zeile, dann erhält man ein einzeiliges 2D-Array. Insofern ist die Ausgangsfrage von HansJ54 also berechtigt.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Kleiner Spaß in trüben Coronazeiten, den Du mir hoffentlich nicht übel nimmst :P .

    Ich bin mir sicher, wenn es einen (lebenden) Menschen gibt, dem ich absolut nichts übel nehme, dann kannst nur Du das sein! 8o

    Extrahiert man aus einem 2D-Array eine Spalte, dann erhält man ein 1D-Array. Extrahiert man aber eine Zeile, dann erhält man ein einzeiliges 2D-Array.

    Ja, genau, und wenn einem das so nicht gefällt, muss man eben eine eigene Funktion dafür schreiben...

  • Um noch mal auf _ArrayExtract zurückzukommen :

    Extrahiert man aus einem 2D-Array eine Spalte, dann erhält man ein 1D-Array. Extrahiert man aber eine Zeile, dann erhält man ein einzeiliges 2D-Array. Insofern ist die Ausgangsfrage von HansJ54 also berechtigt.

    Und das irritiert den Nicht-Profi natürlich ;)

    Gleich noch eine Mitternachtsfrage:

    Kann man die Breite der MsgBox vergrößern? Bricht meine Ausgaben, falls zu lang, immer um. Habe nichts dazu gefunden.

    Und die Schrift ist proportional in der MsgBox - kann man die umstellen?

    :)

    • Offizieller Beitrag

    Kann man die Breite der MsgBox vergrößern? Bricht meine Ausgaben, falls zu lang, immer um. Habe nichts dazu gefunden.

    Und die Schrift ist proportional in der MsgBox - kann man die umstellen?

    Da brauchst du eine eigene Msgbox. Findest du ganz sicher einiges hier oder im EN Forum.