CSV Datei per Batch erweitern
Hallo an das Forum, vielleicht kann mir einer von Euch weiterhelfen.
Ich habe eine CSV Datei mit ";" getrennten Zeichen
Diese hat u.a. folgenden "Spaltenüberschriften"
Nun möchte ich erreichen, dass eine weitere Spalte hinzugefügt wird "Steuersatz"
darunter sollen die Werte aus Service & ISBNNummer zusammengefasst werden, getrennt mit einem "-"
manuell in Excel ist dieses für mich kein Problem, nur soll dieses per VBS Script oder Batch laufen
ohne das ein anderes Problem noch manuell eingegriffen werden muss.
Ich kenne mich in der Programmierung nicht aus, vielleicht kann mir hier jemand helfen.
Schönen Gruß
Ich habe eine CSV Datei mit ";" getrennten Zeichen
Diese hat u.a. folgenden "Spaltenüberschriften"
Service & ISBNNummer
Test;Test2;Test3;.....;Service;...;Test20;ISBNNummer;Test23
2;aaa;123;.....;C22222;...;11111;10000;Test23
3;bbb;456;.....;C33333;...;22222;20000;Test23
Test;Test2;Test3;.....;Service;...;Test20;ISBNNummer;Test23;Steuersatz
Test;Test2;Test3;.....;Service;...;Test20;ISBNNummer;Test23;Steuersatz
2;aaa;123;.....;C22222;...;11111;10000;Test23;C22222-10000
3;bbb;456;.....;C33333;...;22222;20000;Test23;C33333-20000
ohne das ein anderes Problem noch manuell eingegriffen werden muss.
Ich kenne mich in der Programmierung nicht aus, vielleicht kann mir hier jemand helfen.
Schönen Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 206191
Url: https://administrator.de/forum/csv-datei-per-batch-erweitern-206191.html
Ausgedruckt am: 07.05.2025 um 16:05 Uhr
18 Kommentare
Neuester Kommentar
Hallo christiankarl, willkommen im Forum.
Wie bastla schon angemerkt hat, ist das recht gut per VBScript zu lösen.
*.vbs
Grüße
rubberman
Wie bastla schon angemerkt hat, ist das recht gut per VBScript zu lösen.
*.vbs
Option Explicit
Const strCSVPath = "test.csv"
Const strColSrv = "Service"
Const strColISBN = "ISBNNummer"
Const strColNew = "Steuersatz"
Const ForReading = 1
Const ForWriting = 2
Dim objFSO, objFile, objStream, aLine, i, idxService, idxISBN, sNewContent
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strCSVPath) Then
Set objFile = objFSO.GetFile(strCSVPath)
If objFile.Size > 0 Then
Set objStream = objFile.OpenAsTextStream(ForReading)
aLine = Split(objStream.ReadLine, ";")
If UBound(aLine) = -1 Then
MsgBox "Die CSV Datei beginnt mit einer Leerzeile.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
If aLine(UBound(aLine)) <> strColNew Then
idxService = -1
idxISBN = -1
For i = 0 To UBound(aLine)
If aLine(i) = strColSrv Then idxService = i
If aLine(i) = strColISBN Then idxISBN = i
Next
If idxService > -1 And idxISBN > -1 Then
sNewContent = Join(aLine, ";") & ";" & strColNew
While Not objStream.AtEndOfStream
aLine = Split(objStream.ReadLine, ";")
If UBound(aLine) = i - 1 Then
sNewContent = sNewContent & vbNewLine & Join(aLine, ";") & ";" & aLine(idxService) & "-" & aLine(idxISBN)
Else
MsgBox "Zeile mit Anzahl Elementen ungleich Überschrift gefunden.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Wend
objStream.Close
Set objStream = objFile.OpenAsTextStream(ForWriting)
objStream.Write sNewContent
objStream.Close
Else
MsgBox "Überschrift """ & strColSrv & """ und/oder """ & strColISBN & """ nicht gefunden.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Else
MsgBox "Überschrift """ & strColNew & """ existiert bereits.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Else
MsgBox "Die CSV Datei hat keinen Inhalt.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Else
MsgBox "Die CSV Datei konnte nicht gefunden werden.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Grüße
rubberman

Hallo christiankarl!
Das soll heißen, dass die CSV-Datei eine (oder mehrere) Zeilen enthält, in denen die Anzahl der Trennzeichen (;) nicht mit der Anzahl Trennzeichen in der Überschriftzeile übereinstimmt... Kann sich aber auch um eine Leerzeile (vermutlich am Dateiende) handeln ?
Ersetze mal Codezeile 36 (Else) durch:
Dadurch werden Leerzeilen ignoriert...
Gruß Dieter
Das soll heißen, dass die CSV-Datei eine (oder mehrere) Zeilen enthält, in denen die Anzahl der Trennzeichen (;) nicht mit der Anzahl Trennzeichen in der Überschriftzeile übereinstimmt... Kann sich aber auch um eine Leerzeile (vermutlich am Dateiende) handeln ?
Ersetze mal Codezeile 36 (Else) durch:
ElseIf UBound(aLine) > -1 Then
Gruß Dieter
Hallo christiankarl!
Mit Deinen oben ansatzweise geposteten Testdaten (ergänzt um Einträge der Art "STOAPP@DE1234") und dieser Script-Version
läuft das bei mir fehlerfrei (und erfolgeich) ...
Sollte der Fehler bei Dir weiterhin auftreten, poste bitte Deine "global.csv" (auf die relevanten Zeilen reduziert und ggf anonymisiert) in "Code"-Formatierung.
Grüße
bastla
Mit Deinen oben ansatzweise geposteten Testdaten (ergänzt um Einträge der Art "STOAPP@DE1234") und dieser Script-Version
Option Explicit
Const strCSVPath = "global.csv"
Const strColSrv = "Service"
Const strColISBN = "ISBNNummer"
Const strColNew = "ref"
Const strDelim = "app@"
Const ForReading = 1
Const ForWriting = 2
Dim objFSO, objFile, objStream, aLine, i, idxService, idxISBN, sNewContent, j, iPos
Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strCSVPath) Then
Set objFile = objFSO.GetFile(strCSVPath)
If objFile.Size > 0 Then
Set objStream = objFile.OpenAsTextStream(ForReading)
aLine = Split(objStream.ReadLine, ";")
If UBound(aLine) = -1 Then
MsgBox "Die CSV Datei beginnt mit einer Leerzeile.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
If aLine(UBound(aLine)) <> strColNew Then
idxService = -1
idxISBN = -1
For i = 0 To UBound(aLine)
If aLine(i) = strColSrv Then idxService = i
If aLine(i) = strColISBN Then idxISBN = i
Next
If idxService > -1 And idxISBN > -1 Then
sNewContent = Join(aLine, ";") & ";" & strColNew
While Not objStream.AtEndOfStream
aLine = Split(objStream.ReadLine, ";")
If UBound(aLine) = i - 1 Then
For j = 0 To UBound(aLine)
iPos = InStr(1, aLine(j), strDelim, vbTextCompare)
If IPos > 0 Then aLine(j) = Left(aLine(j), iPos -1)
Next
sNewContent = sNewContent & vbNewLine & Join(aLine, ";") & ";" & aLine(idxService) & aLine(idxISBN)
ElseIf UBound(aLine) > -1 Then
MsgBox "Zeile mit Anzahl Elementen ungleich Überschrift gefunden.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Wend
objStream.Close
Set objStream = objFile.OpenAsTextStream(ForWriting)
objStream.Write sNewContent
objStream.Close
Else
MsgBox "Überschrift """ & strColSrv & """ und/oder """ & strColISBN & """ nicht gefunden.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Else
MsgBox "Überschrift """ & strColNew & """ existiert bereits.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Else
MsgBox "Die CSV Datei hat keinen Inhalt.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Else
MsgBox "Die CSV Datei konnte nicht gefunden werden.", vbCritical Or vbSystemModal, "Fehler"
WScript.Quit
End If
Sollte der Fehler bei Dir weiterhin auftreten, poste bitte Deine "global.csv" (auf die relevanten Zeilen reduziert und ggf anonymisiert) in "Code"-Formatierung.
Grüße
bastla

Hallo rubberman!
Ebenfalls gerne
Bin ja auch froh, wenn ich Unterstützung bekomme und habe auch grundsätzlich nichts dagegen, wenn ihr in meinen Codes rumpfuscht
Gruß Dieter
Ebenfalls gerne
Bin ja auch froh, wenn ich Unterstützung bekomme und habe auch grundsätzlich nichts dagegen, wenn ihr in meinen Codes rumpfuscht
Gruß Dieter