dim fso
set fso = CreateObject("Scripting.FileSystemObject")
Const ForReading = 1
Const ForWriting = 2
dim hauptpfad, eingabedatei1, eingabedatei2, trennzeichen, ausgabedatei
' Pfad zu den Dateien
hauptpfad = "C:\VBS\"
eingabedatei1 = hauptpfad & "datei1.csv"
eingabedatei2 = hauptpfad & "datei2.csv"
' falls die Textdatei ein anderes Trennzeichen verwendet (z.B. ein Komma) kann dies hier eingestellt werden
trennzeichen = ";"
' eigene Spaltennamen eintragen (pro Datei den Spaltennamen eintragen über den die Datensätze zusammengeführt werden sollen)
datenfeldDatei1 = "ID"
datenfeldDatei2 = "KD"
' ggf. eigenen Namen für zusammengeführte Ausgabedatei eintragen
ausgabedatei = hauptpfad & "merged.csv"
dim eingabe1, eingabe2, ausgabe
dim zeileDatei1, inhaltDatei1, arrDatei1, iterationSpaltenDatei1, arrLaengeDatei1, spaltenNrDatei1
dim zeileDatei2, inhaltDatei2, arrDatei2, iterationSpaltenDatei2, arrLaengeDatei2, spaltenNrDatei2
'Datendatei 1 zum Lesen öffnen
set eingabe1 = fso.OpenTextFile(eingabedatei1, ForReading)
'Neue Ausgabe-Datendatei erstellen und zum Schreiben öffnen
set ausgabe = fso.OpenTextFile(ausgabedatei, ForWriting, True)
'Datendatei 1 zeilenweise einlesen
Do while not eingabe1.AtEndOfStream
'Aktuelle Zeilennummer ermitteln
zeileDatei1 = eingabe1.Line
'Zeile einlesen
inhaltDatei1 = eingabe1.ReadLine
'Zeile in Array splitten anhand vorgegebenem Trennzeichen
arrDatei1 = split(inhaltDatei1, trennzeichen)
'Länge des Arrays (Anzahl der Einträge im Array) ermitteln und in Variable speichern
arrLaengeDatei1 = UBound(arrDatei1)
'Nur bei Zeile 1...
if ( zeileDatei1 = 1 ) then
'...durch Array (alle Spalten aktueller Zeile) iterieren (von 0 bis Ende des Arrays) - Ermittlung der Spaltennr (Arraynr) mit relevanten Einträgen
for iterationSpaltenDatei1=0 to arrLaengeDatei1
'wenn Array-Spalte den Suchbegriff beinhaltet...
if ( arrDatei1(iterationSpaltenDatei1) = datenfeldDatei1 ) then
'aktuelle Array-Nr (Spaltennr) speichern
spaltenNrDatei1 = iterationSpaltenDatei1
end if
next
end if
'Die zweite Datendatei zum Lesen öffnen
set eingabe2 = fso.OpenTextFile(eingabedatei2, ForReading)
'Datendatei 2 zeilenweise einlesen
Do while not eingabe2.AtEndOfStream
'Aktuelle Zeilennummer ermitteln
zeileDatei2 = eingabe2.Line
'Zeile einlesen
inhaltDatei2 = eingabe2.ReadLine
'Zeile in Array splitten anhand vorgegebenem Trennzeichen
arrDatei2 = split(inhaltDatei2, trennzeichen)
'Länge des Arrays (Anzahl der Einträge im Array) ermitteln und in Variable speichern
arrLaengeDatei2 = UBound(arrDatei2)
'nur bei Zeile 1 ausführen
if ( zeileDatei2 = 1 ) then
'durch Array (alle Spalten aktueller Zeile) iterieren (von 0 bis Ende des Arrays) - Ermittlung der Spaltennr (Arraynr) mit relevanten Einträgen
for iterationSpaltenDatei2=0 to arrLaengeDatei2
'wenn Array-Spalte den Suchbegriff beinhaltet...
if ( arrDatei2(iterationSpaltenDatei2) = datenfeldDatei2 ) then
'aktuelle Array-Nr (Spaltennr) speichern
spaltenNrDatei2 = iterationSpaltenDatei2
end if
next
end if
'nur ausführen wenn sich Schleife in Zeile 1 der Datendatei 1 und in Zeile 1 der Datendatei 2 befindet
if ( zeileDatei1 = 1 and zeileDatei2 = 1 ) then
'Spaltennamen von Datei 1 und Datei 2 in Ausgabedatei schreiben (Spaltenname des Fremdschlüssels in der zweiten Datei um "_neu" ergänzen)
ausgabe.writeline inhaltDatei1 & trennzeichen & Replace(inhaltDatei2, datenfeldDatei2, datenfeldDatei2 & "_neu")
else
'nur ausführen wenn der Spalteninhalt der aktuellen Iterationen von Datei 1 und Datei 2 übereinstimmen
if(arrDatei1(spaltenNrDatei1) = arrDatei2(spaltenNrDatei2)) then
'Spalteninhalt von Datei 1 und Datei 2 verkettet in Ausgabedateidatei schreiben
ausgabe.writeline inhaltDatei1 & trennzeichen & inhaltDatei2
end if
end if
Loop
'Datei 2 schließen
eingabe2.Close
Loop
'Datei 1 schließen
eingabe1.Close
'Ausgabedatei schließen
ausgabe.Close