2D Array erstellen

  • Hallo zusammen,

    ich habe ein Problem beim Erstellen eines 2D Arrays der mir ca. 45 Datensätze nicht untereinader ausgeben soll sondern nebeneinander und das mit mehreren Datensätzen.
    Siehe Quelltext:

    Opt("MustDeclareVars", 1)


    Global Const $CSVFILE = "C:\Users\***\Desktop\example.csv"
    Global Const $DELIM = ";"
    Global $i, $arrContent, $arrLine, $res = 0

    $res = _FileReadToArray($CSVFILE, $arrContent)
    If $res = 1 Then
    For $i = 1 To UBound($arrContent) +1
    $arrLine = StringSplit($arrContent[$i], $DELIM)
    If IsArray($arrLine) And $arrLine[0]<>0 Then
    _ArrayDisplay($arrLine)
    ; do something with the elements of the line
    Else
    MsgBox(48, "", "Error splitting line!")
    EndIf
    Next
    Else
    MsgBox(48, "", "Error opening file!")
    EndIf

    Kann mir einer helfen?

    Vielen Dank!

  • Für _FileReadToArray musst du noch den "Delimiter" angeben -> ";" (siehe Help File, letzter Parameter).

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Global Const $CSVFILE = "C:\Users\***\Desktop\example.csv"
    Global Const $DELIM = ";"
    Global $i, $arrContent, $arrLine, $res = 0


    $res = _FileReadToArray($CSVFILE, $arrContent)
    If $res = 1 Then
    For $i = 1 To UBound($arrContent) +1
    $arrLine = StringSplit($arrContent[$i], $DELIM)
    If IsArray($arrLine) And $arrLine[0]<>0 Then
    _ArrayDisplay($arrLine)
    Else
    MsgBox(48, "", "Error splitting line!")
    EndIf
    Next
    Else
    MsgBox(48, "", "Error opening file!")
    EndIf


    Guck dir mal den Code an

    • Offizieller Beitrag

    Ich denke, dass er als Ergebnis ein 2D-Array haben möchte:

  • Kann mir einer noch helfen, wie Ich die die eingelesenen Daten in Array lösche, sprich Ich möchte das er immer nach Größe des Sheets die Spalte A und Spalte B auf gleichheit prüft und evtl.
    Werte ersetzt ?

    • Offizieller Beitrag

    Wobei UEZ mit _FileReadToArray schon recht hatte. Das funktioniert auch mit dem letzten Parameter bei dem Befehl. Allerdings nur, wenn alle Spalten gleich groß sind.
    Mein Script passt das 2D-Array automatisch der längsten Spalte an.

    Für Deine "Suche & Ersetzen"-Aktion musst Du schon konkreter werden und (Beispiel-) Daten zur Verfügung stellen.
    Was heißt "Gleichheit" und womit sollen sie ersetzt werden?
    Nur innerhalb einer Spalte oder im gesamten Array?

  • Hi Oscar,

    danke ^^
    Vorab als Information, die CSV Datei beinhaltet wahrscheinlich mehr als 1000 Datensätze mit bis zu 44 Spalten.

    Es gibt zwei Spalten im Array, die eine beinhaltet Seriennummern des BIOS (Spalte 7) und die andere die Seriennummer des Gehäuses(Spalte 44).
    Zunächst muss in der Spalte 44 nach Seriennummern gesucht werden die "1S" beinhalten, sollte das der Fall sein so soll diese gelöscht werden, danach
    sollte die Seriennummer auf die letzen 7-8 letzen Zeichen gekürzt werden, hier ein Beispiel => Ursprungsform ( 1S1234567ABCEDF1 ) nach der Formatierung => (ABCEDF1).
    Danach soll diese Seriennummer mit der in Spalte 7 abgeglichen werde, sollte Spalte 44 abweichen von der Spalte 7, dann soll die Spalte 44 Ihren Wert mit den in Spalte 7 ersetzen.

    Die Überprüfungen zu programmieren wäre wahrscheinlich kein Problem, jedoch kann Ich in dem Thema "Array" einpacken gehen....

    Viele Grüße

    caran

  • Naja. Arrays sind nicht schwer. Stell es dir (1D) wie eine Liste vor. Durchnummeriert von 0 bis größe-1. Bei 20 Elementen nummeriert von 0 bis 19. Auf die einzelnen Einträge kannst du mit $var[NUMMER] zugreifen. Also einfach z.B. mit ner Schleife von 0 bis 19 die Liste durchgehen.
    Bei 2D ist es statt einer Liste eine Tabelle. Der 1 Index gibt dir die Zeile an und der 2te die Spalte (oder andersrum, je nachdem wie du willst).
    Bsp:
    0|0 0|1 0|2
    1|0 1|1 1|2
    ...
    An die 1|1 Zelle kommst du also mit $var[1][1], an die 1|2 mit $var[1][2].

    Schon ist das Geheimnisvolle an Arrays gelöst. :)

    Um durchzugehen nimmt man gerne eine for-Schleife:
    for $i=0 to UBound($var)-1 step 1
    $var[$i]
    next
    Ist nichts anderes, als den Teil dazwischen sooft zu wiederholen, bis $i nicht mehr kleiner als die größe ist, also wie oben, bis es 20 ist, dann wird abgebrochen. step 1 sagt, dass $i nach jedem durchlauf um 1 erhöht werden soll (man kann auch 2,-1,... angeben, wobei -1 endlos laufen würde und Fehler Compile-Fehler gibt, da Index>-1).
    Bei 2D-Arrays baut man dann 2 Schleifen ineinander.

    Ich hoffe, jetzt verstehst du Arrays :)


  • Danach soll diese Seriennummer mit der in Spalte 7 abgeglichen werde, sollte Spalte 44 abweichen von der Spalte 7, dann soll die Spalte 44 Ihren Wert mit den in Spalte 7 ersetzen.

    Danach ist der Inhalt von Spalte 44 identisch mit Spalte 7, das kannst du auch durch einfügen von:

    Code
    $Array2D[$i - 1][44] = $Array2D[$i - 1][7]

    direkt vor dem letzten Next erreichen.