Mit VBS erste Zeile von CSV ändern
Hallo zusammen,
ich wurde von einem Arbeitskollegen beauftragt eine CSV-Datei automatisch zu editieren.
Die Ursprungsdatei hat 44 Spalten und sieht vom Aufbau exemplarisch so aus:
Textbox1; Textbox2; Dropdown1; Checkbox1
Herr;Meier;2;Ja
Frau;Müller;3;Nein
Die Datei soll dann im Endeffekt so aussehen:
Anrede;Nachname;Sparte;IBAN;Werbung;
Herr;Meier;2;<leer>;0
Frau;Müller;3;<leer>;1
Im Endeffekt möchte ich die die Reihenfolge der CSV ändern, zusätzliche Leerspalten einfügen und von allen Spalten die Überschrift ändern. Ferner sollen zusätzlich Werte wie "Ja" oder "Nein" umgewandelt werden in 0 und 1.
Ich habe bereits etwas Code mit Hilfe von hier in vbs geschrieben, welcher bereits die Felder in die richtige Reihenfolge angeordnet hat.
Kann mir jemand sagen, mit welchem Befehl ich die erste Zeile ändern kann und die entsprechenden Werte für "Ja" und "Nein" vergeben kann?
Vielen Dank vorab!
Gruß Apfeltoast
ich wurde von einem Arbeitskollegen beauftragt eine CSV-Datei automatisch zu editieren.
Die Ursprungsdatei hat 44 Spalten und sieht vom Aufbau exemplarisch so aus:
Textbox1; Textbox2; Dropdown1; Checkbox1
Herr;Meier;2;Ja
Frau;Müller;3;Nein
Die Datei soll dann im Endeffekt so aussehen:
Anrede;Nachname;Sparte;IBAN;Werbung;
Herr;Meier;2;<leer>;0
Frau;Müller;3;<leer>;1
Im Endeffekt möchte ich die die Reihenfolge der CSV ändern, zusätzliche Leerspalten einfügen und von allen Spalten die Überschrift ändern. Ferner sollen zusätzlich Werte wie "Ja" oder "Nein" umgewandelt werden in 0 und 1.
Ich habe bereits etwas Code mit Hilfe von hier in vbs geschrieben, welcher bereits die Felder in die richtige Reihenfolge angeordnet hat.
Kann mir jemand sagen, mit welchem Befehl ich die erste Zeile ändern kann und die entsprechenden Werte für "Ja" und "Nein" vergeben kann?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
Alt = "C:\Eingabe\quelle.csv"
Neu = "C:\Eingabe\ausgabe.csv"
Delim = ";"
Set fso = CreateObject("Scripting.FileSystemObject")
Zeilen = Split(fso.OpenTextFile(Alt).ReadAll, vbCrLf)
Set DateiNeu = fso.CreateTextFile(Neu)
For Each Zeile In Zeilen
If Trim(Zeile) = "" Then 'Leerzeile oder nur Leerzeichen enthalten
ZeileNeu = Zeile
Else
Felder = Split(Zeile, Delim) 'anhand des Trennzeichens <Delim> in Felder zerlegen
ZeileNeu = _
Felder(40) & Delim & _
Delim & _
Felder(3) & Delim & _
Felder(18) & Delim & _
Delim & _
Delim & _
Delim & _
Felder(4) & Delim & _
Felder(7) & Delim & _
Felder(6) & Delim & _
Felder(12) & Delim & _
Felder (15) & Delim & _
Felder (9) & Delim & _
Felder (13) & Delim & _
Felder (14) & Delim & _
Felder (10) & Delim & _
Felder (11) & Delim & _
Delim & _
Felder (20) & Delim & _
Felder (23) & Delim & _
Felder (24) & Delim & _
...
Felder (25)
End If
DateiNeu.WriteLine ZeileNeu
Next
Vielen Dank vorab!
Gruß Apfeltoast
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 272019
Url: https://administrator.de/forum/mit-vbs-erste-zeile-von-csv-aendern-272019.html
Ausgedruckt am: 11.04.2025 um 01:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo apfeltoast und willkommen im Forum!
Völlig ungetestet etwa so:
Da für das Suchen von "Ja" und "Nein" jeweils auch das Trennzeichen davor und danach verwendet wird (damit nicht auch zB das "Ja" im Namen "Jagr" ersetzt würde), wird das nicht funktionieren, wenn sich das "Ja" oder "Nein" in der ersten oder letzten Spalte befindet.
Grüße
bastla
[Edit] In Zeilen 10, 11 und 13 Array-Bezeichnung auf "Zeilen" korrigiert (und kurz angetestet) [/Edit]
Völlig ungetestet etwa so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
Alt = "C:\Eingabe\quelle.csv"
Neu = "C:\Eingabe\ausgabe.csv"
Delim = ";"
Set fso = CreateObject("Scripting.FileSystemObject")
Zeilen = Split(fso.OpenTextFile(Alt).ReadAll, vbCrLf)
Set DateiNeu = fso.CreateTextFile(Neu)
DateiNeu.WriteLine "Anrede;Nachname;Sparte;IBAN;Werbung;..." 'Kopfzeile schreiben
For i = 1 To UBound(Zeilen) 'erste Zeile (mit Index 0) überspringen
If Trim(Zeilen(i)) = "" Then 'Leerzeile oder nur Leerzeichen enthalten
ZeileNeu = Zeilen(i)
Else
Felder = Split(Replace(Replace(Zeilen(i), Delim & "Ja" & Delim, Delim & "1" & Delim), Delim & "Nein" & Delim, Delim & "0" & Delim), Delim) 'Ersetzung "Ja" und "Nein" sowie anhand des Trennzeichens <Delim> in Felder zerlegen
ZeileNeu = _
Felder(40) & Delim & _
Delim & _
Felder(3) & Delim & _
Felder(18) & Delim & _
Delim & _
Delim & _
Delim & _
Felder(4) & Delim & _
Felder(7) & Delim & _
Felder(6) & Delim & _
Felder(12) & Delim & _
Felder (15) & Delim & _
Felder (9) & Delim & _
Felder (13) & Delim & _
Felder (14) & Delim & _
Felder (10) & Delim & _
Felder (11) & Delim & _
Delim & _
Felder (20) & Delim & _
Felder (23) & Delim & _
Felder (24) & Delim & _
...
Felder (25)
End If
DateiNeu.WriteLine ZeileNeu
Next
Grüße
bastla
[Edit] In Zeilen 10, 11 und 13 Array-Bezeichnung auf "Zeilen" korrigiert (und kurz angetestet) [/Edit]

Moin,
lässt sich in Powershell auch auf eine Zeile verkürzen:
Nur mal so als Anreiz zum Powershell lernen 
Gruß jodel32
lässt sich in Powershell auch auf eine Zeile verkürzen:
1
import-csv "C:\Daten.csv" -Delimiter ";" | select @{n="Anrede";e={$_.Textbox1}}, @{n="Nachname";e={$_.Textbox2}},@{n="Sparte";e={$_.DropDown1}},@{n="IBAN";e={}},@{n="Werbung";e={if($_.Checkbox1 -eq "Ja"){0}else{1}}} | Export-Csv "C:\daten_out.csv" -NoTypeInformation -Delimiter ";" -Encoding UTF8
Gruß jodel32