Per BATCH einer .csv-Tabelle vorgegebene fortlaufende Nummern hinzufügen?

2 Antworten

Vom Beitragsersteller als hilfreich ausgezeichnet

Ich gehe davon aus, dass beide CSV-Dateien Semikolon als Trennzeichen haben. Außerdem gehe ich davon aus, dass in der ersten Tabelle noch keine einzige Artikelnummer steht (abgesehen von der Überschrift). Es wird fortlaufend geschrieben, ohne eine Artikelnummer aus Tabelle 2 zu einer Artikelbezeichnung aus Tabelle 1 zu matchen.

@echo off
Setlocal EnableDelayedExpansion
set CounterA=1
set CounterZ=0
FOR /F "delims=;" %%A IN ('type "Tabelle 2.csv"') DO (
  set /a CounterA+=1
  set Artikel!CounterA!=%%A
)
FOR /F "tokens=1,* delims=;" %%A IN ('type "Tabelle 1.csv"') DO (
  set /a CounterZ+=1
  set Zeile!CounterZ!=%%A;%%B
)
echo !Zeile1!>NonExistentFile.csv
FOR /L %%A IN (2,1,!CounterA!) DO echo !Artikel%%A!;!Zeile%%A! >> NonExistentFile.csv
set /a CounterA+=1
FOR /L %%A IN (!CounterA!,1,!CounterZ!) DO echo ;!Zeile%%A! >> NonExistentFile.csv
ping localhost -n 2 >nul
move /Y "NonExistentFile.csv" "Tabelle 1.csv"
pause
exit /b

 

Nun zur Erklärung:

Die Datei liest alle Artikelnummern aus "Tabelle 2.csv" ein und speichert sie in fortlaufend nummerierten Variablen "Artikel2" bis "ArtikelX". Hat "Tabelle 2.csv" ebenfalls Überschriften, musst du in den ersten FOR-Befehl ein "skip=1 " vor "delims=;" einbauen.

Anschließend liest sie alle Zeilen aus "Tabelle 1.csv" ein und speichert sie in fortlaufend nummerierten Variablen "Zeile1" bis "ZeileY", wobei "Zeile1" die Überschrift ist.

Jetzt wird eine Datei namens "NonExistentFile.csv" erstellt, die am Ende "Tabelle 1.csv" überschreiben wird.

Jede Artikelnummer wird mit der Zeile mit derselben fortlaufenden Nummer in "NonExistentFile.csv" geschrieben, allerdings um 1 verschoben, damit die Überschrift bleibt. Gibt es mehr Zeilen als Artikelnummern, werden die restlichen Zeilen ohne Artikelnummer ans Ende der Datei gehängt. Gibt es mehr Artikelnummern als Zeilen, steht hinter den übrigen Artikelnummern nichts mehr. Sie werden aber alle übernommen.

Damit die Festplatte genug Zeit zum Schreiben hat, wird per PING eine Sekunde gewartet. Zu guter letzt wird die temporäre Datei "NonExistentFile.csv" auf "Tabelle 1.csv" verschoben.

Die Datei wurde erfolgreich getestet unter Windows 10 Home.


PhilEs 
Beitragsersteller
 11.04.2016, 12:24

Perfekt, genau das habe ich gesucht, danke :)

0
PhilEs 
Beitragsersteller
 11.04.2016, 15:54

Ich habe gerade nochmal einwenig rumgetestet weil ich das insgesamt mit 9 csv-Tabellen machen muss (ich habe den Code einfach mehrmals untereinander kopiert und jeweils die Dateinamen angepasst) Das klappt wunderbar, danke nochmal :)

Jetzt habe ich aber noch Folgendes bemerkt:

- Bei einer der Tabellen muss die Artikelnummer in die 2., bei einer weiteren in die 4. Spalte eingetragen werden und nicht in der ersten.

- Bei 2 Tabellen wird ein Artikel jeweils mehrfach aufgeführt, also müsste die Artikelnummer jeweils n-mal wiederholt werden bis die nächste Nummer verwendet wird.

Gibt es da Möglichkeiten, dies umzusetzen?

0

Batch ist sehr primitiv, es handelt sich mehr oder weniger nur um eine Stapelverarbeitung. Ich bezweifle das es damit möglich ist. Versuch es doch mal mit VB.


PhilEs 
Beitragsersteller
 08.04.2016, 16:25

Ja, mit VB würde mehr gehen aber da stecke ich zu wenig drin. Ich hatte gehofft, dass es vielleicht einen Befehl gibt, der das so umsetzt. Ein Großteil der Vorbereitung läuft schon per BATCH und dann hätte ich diesen Befehl nur hinzufügen müssen :)

Danke für deine Antwort :)

0