scorpionesc83
Goto Top

CSV Datei mit VBS auslesen

Hallo zusammen,

ich bin in Sachen VBS ein totaler Anfänger und hoffe, dass ihr mir bei einem Problem helfen könnt.

Ich möchte eine CSV-Datei per VBS verändern. Die CSV kommt regelmäßig und die Änderung soll automatisch erfolgen.

Die CSV hat folgenden Aufbau:

anwenderID;anwenderName;Software
1;Meier;Office
1;Meier;Firefox
1;Meier;Notepad++
2;Schmidt;Office
2;Schmidt;Chrome

Meine Zieldatei soll wie folgt aussehen:

andwenderID;anwenderName;Software1;Software2;Software3;SoftwareN
1;Meier;Office;Firefox;Notepad++;
2;Schmidt;Office;Chrome;;

Als eindeutige Identifikation kann die anwenderID verwendet werden.

Wie kann ich es also anstellen, dass mein VB-Skript auf die anwenderID reagiert. Also die Software in eine Zeile, solange die ID identisch ist?

Oder habt ihr andere Lösungsvorschläge?

Vielen Dank für Eure Unterstützung

Björn

Content-Key: 232922

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

Printed on: April 24, 2024 at 11:04 o'clock

Member: bastla
bastla Mar 18, 2014 at 10:42:04 (UTC)
Goto Top
Hallo scorpionesc83 und willkommen im Forum!

Dein Stichwort wäre "Dictionary" ...

Grüße
bastla
Member: scorpionesc83
scorpionesc83 Mar 18, 2014 at 10:50:28 (UTC)
Goto Top
Hallo bastla,

Danke für deine Antwort.

Wie würde das denn in meinem Beispiel aussehen? Ich habe gerade nach Dictionary und vbs gesucht, muss ich da aber noch ganz schön reinlesen.

VG Björn
Member: bastla
bastla Mar 18, 2014 at 11:21:30 (UTC)
Goto Top
Hallo scorpionesc83!

Schematisch etwa so:
Ein = "Deine.csv"  
Aus = "Deine neue.csv"  
Delim = ";"  

Set fso = CreateObject("Scripting.FileSystemObject")  
Set d = CreateObject("Scripting.Dictionary")  

'gesamten Dateiinhalt einlesen und zeilenweise getrennt in Array ablegen  
Zeilen = Split(fso.OpenTextFile(Ein).ReadAll, vbNewline)

'ab der zweiten Zeile (= Index 1; erste Zeile enthält Header) durchgehen  
For i = 1 To UBound(Zeilen)
    Felder = Split(Zeilen(i), Delim) 'anhand des Delimiters in Felder-Array zerlegen  
	ID = Felder(0) 'ID steht im ersten Feld  
	If d.Exists(ID) Then ' ID schon vorhanden?  
        'Wenn ja: nur Software am Ende anfügen  
        d.Item(ID) = d.Item(ID) & Delim & Felder(2)
    Else
        'neue ID: Name + Software eintragen  
        d.Add ID, Felder(1) & Delim & Felder(2)
    End If
Next

'Alle Datensätze ausgeben  
For Each ID In d.Keys 'alle Dictionary-Einträge durchgehen  
    Ausgabe = Ausgabe & vbNewline & ID & Delim & d.Item(ID)
Next

fso.CreateTextFile(Aus).Write Mid(Ausgabe, 3)
Eine richtige CSV entsteht so nicht, da es (lt Deinem Beispiel oben) eine unterschiedliche Feldanzahl geben kann. Auch die Kopfzeile musst Du Dir noch zurechtlegen ...

Grüße
bastla
Member: scorpionesc83
scorpionesc83 Mar 18, 2014 at 14:02:04 (UTC)
Goto Top
Hallo bastla,

Danke für Deine Antwort.

Ich probiere das spätestens morgen einmal aus.

VG Björn