intermde
Goto Top

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

Content-ID: 190733

Url: https://administrator.de/contentid/190733

Ausgedruckt am: 24.11.2024 um 14:11 Uhr

55648
55648 05.09.2012 um 13:10:50 Uhr
Goto Top
Ich würde hierfür wohl die CSV in Excel einlesen und dort die gleichen Werte zusammenführen.
intermde
intermde 05.09.2012 um 14:52:35 Uhr
Goto Top
Wollte den Umweg aus Excel umgehen und alles per VBS Script erledigen lassen, da die Daten nochmalig in Access zusammen gefügt werden..
Mit Excel hab ich weitere Dokumente die laufen müssen
mathe172
mathe172 05.09.2012 um 18:02:13 Uhr
Goto Top
Hallo,

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!
)
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
NetWolf
NetWolf 05.09.2012 um 18:17:41 Uhr
Goto Top
Grüß Gott,

*grübel* die Datei wird in Access eingelesen? Dann frage ich mich, warum du die Änderung nicht gleich in Access durchführst? Den VBA - Code kannst du doch erstellen, oder?

Grüße aus München
Wolfgang
(Netwolf)
bastla
bastla 05.09.2012 aktualisiert um 21:11:47 Uhr
Goto Top
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 ...
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."  
Vorteil dieser Version: Die Daten müssen nicht sortiert sein ...

Grüße
bastla
mathe172
mathe172 05.09.2012 um 22:32:03 Uhr
Goto Top
@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
bastla
bastla 06.09.2012 um 08:12:43 Uhr
Goto Top
@ mathe172
Bezog sich nicht auf Deinen Batch, sondern auf die VBS-Ansätze zu anderen Datenstrukturen, die der TO hier schon erhalten hat (und die mich hoffen ließen, dass er vielleicht auch selbst schon einmal zumindest die Grundstruktur würde aufbauen können) ...

Grüße
bastla