t3mp
Goto Top

.csv Dateien Zusammenkopieren und bestimmte Zeilen entfernen

Hallo,

Ich habe einen Ordner voller *.csv Dateien und möchte diese per Batch zu einer Datei zusammenfügen... bis dahin kein Problem.
Allerdings hat jede der *.csv Dateien die in dem Ordner liegen eine Überschrift (Zeile 1).

Diese Überschrift ist sehr lang (ca. 500 Zeichen) und sie soll in der erzeugten Datei nur einmal am Anfang auftauchen.

Hat jemand eine Idee wie ich das Problem lösen kann?

Danke für eure Hilfe!

Content-Key: 78467

Url: https://administrator.de/contentid/78467

Printed on: April 20, 2024 at 04:04 o'clock

Member: bastla
bastla Jan 17, 2008 at 20:16:00 (UTC)
Goto Top
Hallo -t3mp-!

Unter der Annahme, dass die genannte Überschrift in allen Dateien identisch ist und daher aus einer beliebigen Datei entnommen werden kann, sowie dass es keine vorgegebene Reihenfolge für die Bearbeitung der einzelnen Dateien gibt, etwa so:
@echo off & setlocal
set "Ordner=D:\DeinOrdner"  
set "Sammel=D:\DeineSammeldatei.csv"  

pushd "%Ordner%"  
if exist "%Sammel%" del "%Sammel%"  
for %%i in (*.csv) do if not exist "%Sammel%" for /f "usebackq delims=" %%z in ("%%i") do if not exist "%Sammel%" echo %%z>"%Sammel%"  
for %%i in (*.csv) do more +1 "%%i">>"%Sammel%"  
popd
Alternativ dazu könntest Du auch einfach vorweg die (vermutlich auch in Zukunft gleich bleibende) Zeile 1 in eine Datei "D:\DeinOrdner\Zeile1.txt" speichern und es danach so versuchen:
@echo off & setlocal
set "Ordner=D:\DeinOrdner"  
set "Sammel=D:\DeineSammeldatei.csv"  
set "Zeile=D:\DeinOrdner\Zeile1.txt"  

copy "%Zeile%" "%Sammel%" >nul  
copy "%Ordner%\*.csv" "%Sammel%.tmp" >nul  
findstr /v /b /c:"Eine ganz lange Ueberschrift" "%Sammel%.tmp">>"%Sammel%"  
del "%Sammel%.tmp"  
Hier bist Du zwar weniger flexibel, da bei einer allfälligen Änderung der Zeile 1 nicht nur die zugehörige "Zeile1.txt", sondern auch der Suchstring "SignifikanterZeilenanfangZeile1" im Batch angepasst werden muss, solltest aber andererseits von Leerzeilen in der Sammeldatei verschont bleiben.

Der genannte Suchstring soll so viele Zeichen vom Beginn der Zeile 1 an enthalten, dass damit diese Zeile sicher erkannt und aus der temporären Sammeldatei ausgefiltert werden kann. Es dürfen übrigens auch Leerzeichen Bestandteil dieses Suchstrings sein.

Grüße
bastla
Member: t3mp
t3mp Jan 17, 2008 at 20:51:34 (UTC)
Goto Top
Hallo bastla,

danke für deine schnelle Hilfe!

Mit meinen 3 Test-Dateien funktionieren beide Lösungen von dir Problemlos!
Denke mal das es mit den Daten die ich zusammenfügen will auch hinhaut.

Hintergrund des ganzen ist:
Eine Klima-Kammer misst jede Stunde die Temperatur und viele andere Werte in seinem inneren & schreibt diese am ende eines Tages in eine JAHR-MONAT-TAG.csv Datei. Jeden Tag wird also eine neue Datei angelegt. Wenn man dann, die über einen Zeitraum von mehreren Monaten erzeugten Daten betrachten möchte macht sich das mit vielen einzelnen Dateien schlecht.

Mit der Batch-Lösung sind ja die Daten in der Ausgabedatei dann auch gleich Chronologisch geordnet.

Super!
Member: bastla
bastla Jan 17, 2008 at 21:09:39 (UTC)
Goto Top
Hallo -t3mp-!

Um die chronologische Ordnung (anhand des Änderungsdatums der jeweiligen Datei) sicherzustellen, wäre es so besser:
@echo off & setlocal
set "Ordner=D:\DeinOrdner"  
set "Sammel=D:\DeineSammeldatei.csv"  

pushd "%Ordner%"  
if exist "%Sammel%" del "%Sammel%"  
for %%i in (*.csv) do if not exist "%Sammel%" for /f "usebackq delims=" %%z in ("%%i") do if not exist "%Sammel%" echo %%z>"%Sammel%"  
for /f "delims=" %%i in ('dir /b /od *.csv') do more +1 "%%i">>"%Sammel%"  
popd
Noch ein Hinweis: Derzeit ist der Batch darauf ausgelegt, bei jedem Start eine neue Sammeldatei aus allen vorhandenen .csv-Dateien zu erstellen - falls dies nicht gewünscht wäre, sondern die aktuelle Sammeldatei nur (und dann natürlich ohne Kopfzeile) ergänzt werden soll, einfach die Zeile
if exist "%Sammel%" del "%Sammel%"  
durch das Voranstellen von REM oder :: auskommentieren (oder auch löschen). Allerdings müssten dann nach jedem Durchlauf die bereits verarbeiteten Dateien aus dem Ordner entfernt werden.

Grüße
bastla
Member: t3mp
t3mp Jan 22, 2008 at 17:05:57 (UTC)
Goto Top
Hallo bastla,

vielen Dank nochmals für deine Hilfe.

Das Zusammenkopieren der Dateien funktioniert problemlos.

viele Grüße!