1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

[VBS] Zeilen anhand eines Spalteneintrags x-fach duplizieren

Möglichkeit Zeilen einer Textdatei (.txt, .csv) anhand eines Spaltennamens x-fach zu duplizieren

  1. rince1984
    Einzelne Zeilen einer Textdatei (z.B. test.csv) sollen x-fach dupliziert werden, wobei die Anzahl der Wiederholungen in einer Spalte der Zeilen steht.

    Exemplarischer Inhalt der CSV-Datei:
    Code (Text):
    1. KD;Name;Anzahl;wiederholung
    2. 123;Thomas;5;11
    3. 456;Sandra;3;7
    4. 789;Klaus;9;1
    Wenn die Spalte "Anzahl" angibt wie oft die Zeile geschrieben werden soll wäre das zu erwartende Ergebnis der geänderten CSV-Datei wie folgt:
    Code (Text):
    1. KD;Name;Anzahl;wiederholung
    2. 123;Thomas;5;11
    3. 123;Thomas;5;11
    4. 123;Thomas;5;11
    5. 123;Thomas;5;11
    6. 123;Thomas;5;11
    7. 456;Sandra;3;7
    8. 456;Sandra;3;7
    9. 456;Sandra;3;7
    10. 789;Klaus;9;1
    11. 789;Klaus;9;1
    12. 789;Klaus;9;1
    13. 789;Klaus;9;1
    14. 789;Klaus;9;1
    15. 789;Klaus;9;1
    16. 789;Klaus;9;1
    17. 789;Klaus;9;1
    18. 789;Klaus;9;1
    VBS-Code zur Umsetzung:
    Code (Visual Basic):
    1. dim fso
    2. set fso = CreateObject("Scripting.FileSystemObject")
    3.  
    4. Const ForReading = 1
    5. Const ForWriting = 2
    6.  
    7. dim hauptpfad
    8. dim eingangsdatei
    9. dim trennzeichen
    10. dim spaltenauswahl
    11. dim ausgangsdatei
    12.  
    13. ' "C:\VBS\" durch eigenes Verzeichnis ersetzen. In diesem Verzeichnis befindet sich die zu bearbeitende CSV-Datei
    14. hauptpfad = "C:\VBS\"
    15.  
    16. ' "test.csv" durch eigenen Dateinamen ersetzen
    17. eingangsdatei = hauptpfad & "test.csv"
    18.  
    19. ' falls die Textdatei ein anderes Trennzeichen verwendet (z.B. ein Komma) kann dies hier eingestellt werden
    20. trennzeichen = ";"
    21.  
    22. ' "Anzahl" durch eigenen Spaltennamen ersetzen (den Spaltennamen eintragen der die Anzahl der Wiederholungen einer Zeile vorgibt)
    23. spaltenauswahl = "Anzahl"
    24.  
    25. ' "datendatei_neu.csv" durch eigenen Dateinamen ersetzen, falls gewünscht
    26. ausgangsdatei = hauptpfad & "datendatei_neu.csv"
    27.  
    28. dim eingabe, ausgabe
    29. dim zeile, inhalt, teilen
    30. dim i, d, spaltennr, j
    31.  
    32. 'Original-Datendatei  zum Lesen öffnen
    33. set eingabe = fso.OpenTextFile(eingangsdatei, ForReading)
    34.  
    35. 'Neue Datendatei erstellen und zum Schreiben öffnen
    36. set ausgabe = fso.OpenTextFile(ausgangsdatei, ForWriting, True)
    37.  
    38. 'Textdatei zeilenweise einlesen
    39. Do while not eingabe.AtEndOfStream
    40.  
    41.     'Aktuelle Zeilennummer ermitteln
    42.    zeile = eingabe.Line
    43.  
    44.     'Zeile einlesen
    45.    inhalt = eingabe.ReadLine
    46.  
    47.     'Zeile in Array splitten anhand vorgegebenem Trennzeichen
    48.    teilen = split(inhalt, trennzeichen)
    49.  
    50.     'Länge des Arrays (Anzahl der Einträge im Array) ermitteln und in Variable speichern
    51.    d = UBound(teilen)
    52.  
    53.     'durch Array (alle Spalten aktueller Zeile) iterieren (von 0 bis Ende des Arrays)
    54.    for i=0 to d
    55.         'nur bei Zeile 1 ausführen
    56.        if ( zeile = 1 ) then
    57.             'wenn Array-Spalte den Suchbegriff beinhaltet...
    58.            if ( teilen(i) = spaltenauswahl ) then
    59.                 'aktuelle Array-Nr (Spaltennr) speichern
    60.                spaltennr = i
    61.             end if
    62.         end if
    63.     next
    64.  
    65.     'bei Zeile 1 die komplette Zeile in die neue Textdatei schreiben
    66.    if ( zeile = 1 ) then
    67.         ausgabe.WriteLine inhalt
    68.     'alle anderen Zeilen x-Fach in die neue Datei schreiben (so oft wie es die oben gesuchte Spalte angibt)
    69.    else
    70.         'Ausgabe x-Fach wiederholen
    71.        for j=1 to teilen(spaltennr)
    72.             ausgabe.WriteLine inhalt
    73.         next
    74.     end if
    75. Loop
    76.  
    77. eingabe.Close
    78. ausgabe.Close
    79.  
    80. 'Originaldatei löschen
    81. fso.DeleteFile(eingangsdatei)
    82.  
    83. 'Neue Textdatei umbenennen (mit Namen der gelöschten Originaldatei)
    84. fso.MoveFile ausgangsdatei, eingangsdatei
    Nachdem der Code recht detailliert kommentiert ist (alle grün dargestellten Zeilen sind Kommentare zum jeweils folgenden Code) sollte eine zusätzliche Erklärung nicht notwendig sein.

    Viele Grüße
    Tom