Zeilen einer zusammengeführten CSV Datei über Batch ändern
Hallo zusammen,
ich habe über batch ca. 1000 CSV Datein (Messdaten) zusammengeführt. Das Ganze schaut nun in der neuen CSV DAtei so aus (Nur ein Ausschnitt):
Zeit Millisekunden L1_Mittelwert L1_Minimum L1_Maximum L1_Bereich L1_Standard Abweichung
16.04.2015 15:27 125 78,58 58,51 92,94 34,43 7,66
16.04.2015 15:27 93 51,51 37,84 64,77 26,93 6,85
Zeit Millisekunden L1_Mittelwert L1_Minimum L1_Maximum L1_Bereich L1_Standard Abweichung
16.04.2015 15:27 171 78,59 58,57 92,87 34,3 7,65
16.04.2015 15:27 140 51,49 39,34 63,77 24,44 6,75
Zeit Millisekunden L1_Mittelwert L1_Minimum L1_Maximum L1_Bereich L1_Standard Abweichung
16.04.2015 15:27 468 51,39 39,93 64,85 24,93 6,66
Zeit Millisekunden L1_Mittelwert L1_Minimum L1_Maximum L1_Bereich L1_Standard Abweichung
16.04.2015 15:27 515 51,64 40,42 65,85 25,42 6,6
16.04.2015 15:27 562 51,35 39,43 65,35 25,92 6,62
16.04.2015 15:27 593 51,6 39,93 67,35 27,42 6,7
16.04.2015 15:27 640 51,7 38,93 65,85 26,92 6,7
16.04.2015 15:27 687 51,75 39,43 66,35 26,92 6,74
Nun brauche ich nicht ca.1000 Mal den Header sondern den brauche ich nur 1 Mal. Wie gehe ich vor, so dass nur in der 1. Zeile der Header steht aber nicht mehr in den anderen Zeilen?
Das Problem ist, dass ich je CSV Datei eine unterschiedliche Zahl an Messwerten habe. Die Spalten bleiben immer identisch, aber die Zeilen änder sich, wie ihr oben sehen könnt!
Info: hier schaut es so aus, als wäre Header und Messwert nicht untereinander weggeschrieben. In der eigentlichen CSV Datei, ist die Header und Werte Zuteilung korrekt.
Gruß und danke!
ich habe über batch ca. 1000 CSV Datein (Messdaten) zusammengeführt. Das Ganze schaut nun in der neuen CSV DAtei so aus (Nur ein Ausschnitt):
Zeit Millisekunden L1_Mittelwert L1_Minimum L1_Maximum L1_Bereich L1_Standard Abweichung
16.04.2015 15:27 125 78,58 58,51 92,94 34,43 7,66
16.04.2015 15:27 93 51,51 37,84 64,77 26,93 6,85
Zeit Millisekunden L1_Mittelwert L1_Minimum L1_Maximum L1_Bereich L1_Standard Abweichung
16.04.2015 15:27 171 78,59 58,57 92,87 34,3 7,65
16.04.2015 15:27 140 51,49 39,34 63,77 24,44 6,75
Zeit Millisekunden L1_Mittelwert L1_Minimum L1_Maximum L1_Bereich L1_Standard Abweichung
16.04.2015 15:27 468 51,39 39,93 64,85 24,93 6,66
Zeit Millisekunden L1_Mittelwert L1_Minimum L1_Maximum L1_Bereich L1_Standard Abweichung
16.04.2015 15:27 515 51,64 40,42 65,85 25,42 6,6
16.04.2015 15:27 562 51,35 39,43 65,35 25,92 6,62
16.04.2015 15:27 593 51,6 39,93 67,35 27,42 6,7
16.04.2015 15:27 640 51,7 38,93 65,85 26,92 6,7
16.04.2015 15:27 687 51,75 39,43 66,35 26,92 6,74
Nun brauche ich nicht ca.1000 Mal den Header sondern den brauche ich nur 1 Mal. Wie gehe ich vor, so dass nur in der 1. Zeile der Header steht aber nicht mehr in den anderen Zeilen?
Das Problem ist, dass ich je CSV Datei eine unterschiedliche Zahl an Messwerten habe. Die Spalten bleiben immer identisch, aber die Zeilen änder sich, wie ihr oben sehen könnt!
Info: hier schaut es so aus, als wäre Header und Messwert nicht untereinander weggeschrieben. In der eigentlichen CSV Datei, ist die Header und Werte Zuteilung korrekt.
Gruß und danke!
Please also mark the comments that contributed to the solution of the article
Content-Key: 270501
Url: https://administrator.de/contentid/270501
Printed on: April 23, 2024 at 23:04 o'clock
12 Comments
Latest comment
Moin,
z.B. so für alle CSV-Dateien in einem Ordner
Gruß jodel32
z.B. so für alle CSV-Dateien in einem Ordner
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "FOLDER=C:\quelle"
set "FOLDEROUT=C:\ziel"
if not exist "%FOLDEROUT%" md "%FOLDEROUT%"
for %%a in ("%FOLDER%\*.csv") DO @(
set /p line1=<"%%a"
echo !line1!>"%FOLDEROUT%\%%~nxa"
type "%%a" | find /v "!line1!">>"%FOLDEROUT%\%%~nxa"
)
Du hast jetzt nicht wirklich den code einfach markiert und mit den Zahlen am Anfang in deine Textdatei gepastet ?? Damit kann das ja nicht funktionieren!
Das machst du über den kleinen Link Quelltext oben rechts im Codefenster, erst dann kopierst du ihn.
Gruß jodel32
Das machst du über den kleinen Link Quelltext oben rechts im Codefenster, erst dann kopierst du ihn.
Den Befel habe ich nun exakt so eingegeben, wie von dir geschrieben
Falsch, das ganze kommt dann in eine Textdatei mit der Endung *.cmd oder *.bat.Kannst du einem Anfänger hier auf die Sprünge helfen?
Gruß jodel32
Zitat von @Nelspruit:
ne, kopiert und dann gepastet habe ich es nicht, sondern ohne die Nummerierung in das cmd Fenster eingetippelt.
Hände über dem Kopt zusammenschlag Das geht hier nicht, das Script ist nur für die Verwendung in einer Batchdatei gedacht.ne, kopiert und dann gepastet habe ich es nicht, sondern ohne die Nummerierung in das cmd Fenster eingetippelt.
Das ist nunaber, wie ich dich verstehe nicht korrekt, sonder ich öffne eine Text Datei und schreibe alles dort hinein?
Genau. Ausführen tust du es dann per Doppelklick auf die *.cmd oder *.bat Datei. Aber bitte darauf achten das die Textdatei die richtige Dateierweiterung hat. Im Explorer also die Dateierweiterung anzeigen lassen (Ordneroptionen).Bist du sicher das du hier im richtigen Forum bist, das ist eigentlich ein Administrator-Forum und nichts für absolute Anfänger ?
OK
Im Zielordner landen dann die durch das Script abgeänderten Dateien mit nur einer Überschriftenzeile.
2. Quelle und Ziel durch den Pfad ersetzt. HIer verstehe ich es so, dass meine 1000 *.csv Dateien zu einer zusammengefasst werden
und im gleichen Ordner abgespeichert werden.
NEIN hast du falsch verstanden, im Quellordner liegen deine CSV-Dateieen in denen bereits die doppelten Überschriftenzeilen enthalten sind.und im gleichen Ordner abgespeichert werden.
Im Zielordner landen dann die durch das Script abgeänderten Dateien mit nur einer Überschriftenzeile.
b) der Befehl "md" erzeugt, wenn ich es richtig verstanden habe, für alle Dateien, die nicht *.csv, sind einen
separaten Ordner im Zielordner?
Nein nur wenn der Zielordner nicht vorhanden ist wird er einmalig angelegt!separaten Ordner im Zielordner?
c) ab Zeile 5.) bleibt der Befehl für mich ein Rätsel. Ich verstehe, das aufgrund von "%%a" eine Bedingung
aufgestellt wird und daher mit dem code "/ line1 angegeben wird, dass in Reihe 1 etwas gemacht wird, sofern sie <=%%a.Ist
dieser Gedankengang richtig und was gibt mir %%a genau an? Dies verstehe ich trotz der Links von dir nicht.
d) mit welchem Befehl genau veranlasse ihc, ass die csv Dateien zum einen zusammenegeführt, aber nur eine Textzeile (ein
Header) beibehalten wird?
e) Jetzt wirst du wahscheinlich schon wieder lachen, ..... Wie bekomme ich meine neu erstellte Textdatei.cmd nun in cmd.exe?
Lerne erst mal die Grundlagen ...aufgestellt wird und daher mit dem code "/ line1 angegeben wird, dass in Reihe 1 etwas gemacht wird, sofern sie <=%%a.Ist
dieser Gedankengang richtig und was gibt mir %%a genau an? Dies verstehe ich trotz der Links von dir nicht.
d) mit welchem Befehl genau veranlasse ihc, ass die csv Dateien zum einen zusammenegeführt, aber nur eine Textzeile (ein
Header) beibehalten wird?
e) Jetzt wirst du wahscheinlich schon wieder lachen, ..... Wie bekomme ich meine neu erstellte Textdatei.cmd nun in cmd.exe?
Zitat von @Nelspruit:
Ich konnte die Datei per Doppelklick öffnen. Jedoch ist die Syntax für den Dateinamen, Verzeichnisnamen oder die
Datenträgerbezeichnung falsch. Das heißt, ich bräuchte noch HIlfe
Ist ja klar wenn du die Variablen im Zeile 4 durch den Pfad ersetzt ...das geht so nichtIch konnte die Datei per Doppelklick öffnen. Jedoch ist die Syntax für den Dateinamen, Verzeichnisnamen oder die
Datenträgerbezeichnung falsch. Das heißt, ich bräuchte noch HIlfe
Also ausnahmsweise noch mal für Anfänger, Schritt für Schritt:
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "FOLDER=C:\Users\%username%\Desktop\Ordner"
set "FOLDEROUT=C:\Users\%username%\Desktop\Ordner\Fertig"
if not exist "%FOLDEROUT%" md "%FOLDEROUT%"
for %%a in ("%FOLDER%\*.csv") DO @(
set /p line1=<"%%a"
echo !line1!>"%FOLDEROUT%\%%~nxa"
type "%%a" | find /v "!line1!">>"%FOLDEROUT%\%%~nxa"
)
- Zeile 2 und 3 setzen die Variablen für den Quell- und den Zielordner (Im Zielordner landen die fertig bearbeiteten Dateien).
- Zeile 4 erstellt den Zielordner falls er noch nicht existieren sollte
- Ab Zeile 5 startet eine FOR-Schleife die alle CSV-Dateien im Quellordner durchläuft ( Dort bitte also für den Test nur deine CSV-Datei hineinlegen die die doppelten Header in den Zeilen hat.
- Zeile 6 ließt die erste Zeile der aktuellen CSV-Datei in eine Variable mit dem Namen line1
- Zeile 7 schreibt den Inhalt dieser Variablen in die neue Ausgabedatei im Zielordner
- Zeile 8 findet alle Zeilen die nicht (Parameter /v)mit der ersten Zeile übereinstimmen und schreibt diese ebenfalls in die neue Datei im Zielordner.
Gehe erst mal die einschlägigen Tutorials für die Grundlagen durch. Dann kannst du dich ja mal durch die
Rubrik wühlen und dir von den Mitgliedern das ein oder andere abschauen und davon lernen. Da gibt's jede Menge Input für alle Lebenslagen.
Viel Erfolg und happy coding
Rubrik wühlen und dir von den Mitgliedern das ein oder andere abschauen und davon lernen. Da gibt's jede Menge Input für alle Lebenslagen.
Viel Erfolg und happy coding
Bitte den Beitrag dann noch als gelöst markieren. Danke.