CSV Datei trennen, ersten Wert beibehalten und folgende Werte mit KOMMA trennen
Hallo,
ich habe unterschiedliche Dateien mit dem Aufbau z.b. Test.csv
dbr;Marke
234;A
234;v
456;V
456;S
456;C
897;
daraus soll Werden
dbr;Marke
234;A,V
456;V,S,C
897;
Vielleich kann mir hier nochmal jemand helfen..
Gruß
Thoma
ich habe unterschiedliche Dateien mit dem Aufbau z.b. Test.csv
dbr;Marke
234;A
234;v
456;V
456;S
456;C
897;
daraus soll Werden
dbr;Marke
234;A,V
456;V,S,C
897;
Vielleich kann mir hier nochmal jemand helfen..
Gruß
Thoma
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 190733
Url: https://administrator.de/forum/csv-datei-trennen-ersten-wert-beibehalten-und-folgende-werte-mit-komma-trennen-190733.html
Ausgedruckt am: 18.02.2025 um 23:02 Uhr
7 Kommentare
Neuester Kommentar

Ich würde hierfür wohl die CSV in Excel einlesen und dort die gleichen Werte zusammenführen.
Hallo,
in der Hoffnung, dass Batch auch ok ist (zumal wir hier im Batch&Shell-Bereich sind):
Diese Batch liest die Datei csv.csv ein (in Zeile 2 änderbar) und gibt das Ergebnis in Output.csv aus (siehe Zeile 3). Der "Header" muss dabei in der ersten Zeile der Input-Datei stehen.
MfG,
Mathe172
in der Hoffnung, dass Batch auch ok ist (zumal wir hier im Batch&Shell-Bereich sind):
@echo off & setlocal enabledelayedexpansion
set "Input=csv.csv"
set "Output=Output.csv"
<"%Input%" set /p "Header="
for /f "skip=1 tokens=1,2 usebackq delims=;" %%A in ("csv.csv") do (
if "!Data_%%A!"=="" set "dbrs=!dbrs! %%A"
set "Data_%%A=!Data_%%A!,%%B"
)
>"%Output%" (
echo.%Header%
for %%A in (%dbrs%) do echo.%%A;!Data_%%A:~1!
)
MfG,
Mathe172
Hallo intermde!
Ich reiche noch die VBS-Variante nach - aber eigentlich solltest Du doch inzwischen auch selbst schon zumindest zu einem Ansatz kommen können ...
Vorteil dieser Version: Die Daten müssen nicht sortiert sein ...
Grüße
bastla
Ich reiche noch die VBS-Variante nach - aber eigentlich solltest Du doch inzwischen auch selbst schon zumindest zu einem Ansatz kommen können ...
Ein = "Test.csv"
Aus = "Test_neu.csv"
Delim = ";"
Set fso = CreateObject("Scripting.FileSystemObject")
Set d = CreateObject("Scripting.Dictionary")
T = Split(fso.OpenTextFile(Ein).ReadAll, vbNewLine)
Ueber = T(0) 'erste Zeile übernehmen
For i = 1 To UBound(T) 'Bezeichnungen sammeln
If Trim(T(i)) <> "" Then 'keine Leerzeile verarbeiten
dbr = Split(T(i), Delim)(0) 'erstes und ...
Marke = Split(T(i), Delim)(1) '... zweites Feld der Datenzeile lesen ...
If dbr <> "" Then
If Not d.Exists(dbr) Then '... und, falls noch nicht vorhanden, ...
d.Add dbr, Marke '... als neuen Eintrag dem Dictionary hinzufügen; ...
Else
d.Item(dbr) = d.Item(dbr) & "," & Marke '... ansonsten nur "Marke" an bisherige Zeile anfügen
End If
End If
End If
Next
Daten = Ueber 'Ausgabe beginnt mit Überschrift
K = d.Keys: I = d.Items ' Werte aus Dictionary in Arrays übernehmen ...
For j = 0 To UBound(K) '... und diese zeilenweise ...
Daten = Daten & vbNewLine & K(j) & Delim & I(j) '... auslesen und zur Ausgabe hinzufügen
Next
fso.CreateTextFile(Aus).Write Daten 'Ausgabedatei schreiben
WScript.Echo "Fertig."
Grüße
bastla
@bastla: Was meinst du mit "bei dieser Version müssen die Daten nicht sortiert sein"? Müssen sie das bei meiner? Ich bin wahrscheinlich einfach blind...könntest du mich aufklären?
Mathe172
Mathe172