2 CSV Dateien zusammenfügen

  • Hallo Zusammen,

    ich habe aktuell das Problem, dass ich 2 CSV Dateien zusammenfügen möchte. Diese sollen aber nicht untereinander angefügt werden, sondern nebeneinander.

    Anbei mal 3 Beipiele wie es aussehen soll.

    Habe nerst gedacht, ich nutze ArrayMerge, aber da werden die Dateien untereinander geschrieben.

    Hat da jemamd eine Idee, wie man das am Besten umsetzt?

    Danke

    Gruß gmmg

    • Offizieller Beitrag

    Vorausgesetzt, dass beide Dateien gleich viele Zeilen besitzen, kann man das ganz einfach so lösen:

  • Man muss nicht unbedingt erst ein 2D-Array draus basteln.
    Dann wird es "ganz einfach" (diesmal wirklich... ;) )

    AutoIt
    Local $aDatei1 = FileReadToArray("Datei1.csv"), $aDatei2 = FileReadToArray("Datei2.csv")
    
    $hOut = FileOpen("zusammen.csv", 2)
    For $i = 0 To UBound($aDatei1) - 1
        FileWriteLine($hOut, $aDatei1[$i] & "," & $aDatei2[$i])
    Next
    FileClose($hOut)
  • Hallo Oscar, Hallo AspirinJunkie,

    danke für die schnellen Antworten :)

    Eben mal probiert, dabei ist mir aufgefallen, dass ich ja aus der zweiten CSV Datei noch die ersten beiden Spalten löschen möchte, da die schon in der ersten Datei vorhanden sind.

    Da würde ich dann bei dem Script von Oscar zweimal _ArrayColDelete($aFile2, 0) hinzufügen.


    Gruß gmmg

    2 Mal editiert, zuletzt von gmmg (27. März 2021 um 14:17)

  • dabei ist mir aufgefallen, dass ich ja aus der zweiten CSV Datei noch die ersten beiden Spalten löschen möchte

    Dann macht es nun auf einmal doch Sinn die als 2D-Array zu behandeln.
    Wobei es natürlich auch mit der stringbasierten Variante geht:

    AutoIt
    Local $aDatei1 = FileReadToArray("Datei1.csv"), $aDatei2 = FileReadToArray("Datei2.csv")
    
    $hOut = FileOpen("zusammen.csv", 2)
    For $i = 0 To UBound($aDatei1) - 1
        FileWriteLine($hOut, $aDatei1[$i] & "," & StringTrimLeft($aDatei2[$i], StringInStr($aDatei2[$i], ',', 1, 2)))
    Next
    FileClose($hOut)

    Ansonsten ist noch Oscars Frage nach der gleichen Zeilenanzahl zu beantworten.

  • Du solltest lieber erstmal etwas dazu sagen, ob die Dateien wirklich gleich lang sind (Zeilenanzahl).

    Wenn das nämlich nicht gegeben ist, dann brauchst Du eine andere Lösung.

    Guten Morgen,

    danke für eure Hilfe.

    Oscar , die Zeilenanzahl sollte in beiden Dateien übereinstimmen.

    Folgend nochmal die original csv Dateien. (umbenannt in txt, wegen dem Forum)


    Ein Problem habe ich aber jetzt. Ich möchte die CSV in Excel einlesen, sodass jede Spalte in eienr Zelle steht.

    Das scheint aber wegen der Zeichencodierung nicht zu gehen.

    Mit der einzelnen "Import_satiusfaction_Test" bzw. ist der Export nach xlsx kein Problem, wenn beide zusammengefasst sind, funktioniert der Export nicht mehr.


    Gruß gmmg :)

  • Hallo Zusammen,

    bei zusammenfügen beider csv Dateine konnte ich jetzt bei Fileopen die richtige Codierung festlegen.

    Code
    Global $hFile = FileOpen($path & "zusammen_test.csv", $FO_OVERWRITE + $FO_UNICODE)
    
    If $hFile <> -1 Then
    
    FileWrite($hFile, $sOut)
    
    FileClose($hFile)
    
    EndIf

    Danke

    Gruß gmmg