nelspruit
Goto Top

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!

Content-Key: 270501

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

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

Mitglied: 114757
114757 Apr 28, 2015, updated at Apr 29, 2015 at 12:29:33 (UTC)
Goto Top
Moin,
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"  
)
Gruß jodel32
Member: Nelspruit
Nelspruit Apr 29, 2015 at 09:40:26 (UTC)
Goto Top
Hi Jodel,

Besten Dank für die zügige Antwort, ich habe allerderdings noch nicht wirklich mit einer Batch-Datei gearbeitet.
Den Befel habe ich nun exakt so eingegeben, wie von dir geschrieben (bis auf eine formale Sache, s. unten - Betragsstrich). Lediglich bei

02. set "FOLDER=C:\quelle" habe ich für Quelle meinen Quellordnerpfad angegeben. Den identischen Pfad habe ich für
03. set "FOLDEROUT=C:\ziel" genutzt

Die erste Fehlermeldung erhielt ich nach Eingabe von 04., wobei ich für "Ziel" den Zielpfad aus 03. eingegeben habe (Fehlermeldung: Die Syntax für den Dateinamen, Verzeichnisnamen oder die Datenträgerbezeichnung ist falsch.)

05. Exakte Eingabe wie hier, allerdings Fehlermeldung ("%%a" kann syntaktisch an dieser Stelle nicht verarbeitet werden)

07 und 08. Wurde exakt so eingegeben aber Fehlermeldung (Das Systemn kann den angegebenen Pfad nicht finden)

ZUdem habe ich folgendes formales Problem: Die Betragsstriche sind unterbrochen (Alt Gr |), wenn ich mittels Tastenkombination den Strich einfügen möchte.

Kannst du einem Anfänger hier auf die Sprünge helfen? Und noch ein Frage: bevor ich jetzt 10 mal diesen Befehl eingebe, gib es die Möglichkeit den zu kopieren oder zu bearbeiten oder muss ich immer von vorne anfangen?

Besten Dank
Mitglied: 114757
114757 Apr 29, 2015 updated at 09:47:03 (UTC)
Goto Top
Du hast jetzt nicht wirklich den code einfach markiert und mit den Zahlen am Anfang in deine Textdatei gepastet face-smile ?? Damit kann das ja nicht funktionieren!
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
Member: Nelspruit
Nelspruit Apr 29, 2015 at 10:26:42 (UTC)
Goto Top
Hi Jodel,

ne, kopiert und dann gepastet habe ich es nicht, sondern ohne die Nummerierung in das cmd Fenster eingetippelt. D. h. ich bin über den Befehl cd "Pfad" ind den Ordner gegangen, in dem alle ca. 1000 csv Dateien sind und habe dann mit dem Befehl @echo... weitergeschrieben!
Das ist nunaber, wie ich dich verstehe nicht korrekt, sonder ich öffne eine Text Datei und schreibe alles dort hinein?

Ich lese mir mal die Links von dir durchface-smile Vielen Dank und bis später!
Member: Nelspruit
Nelspruit Apr 29, 2015 at 11:19:17 (UTC)
Goto Top
Hi Jodel,

so, ich bin schon mal etwas weiter, dh.:

1. ich habe deinen Text über den Link Quelltext kopiert
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. (Diesen Schritt hatte ich eigentlich schon mit dieser copy*.csv neu.csv gemacht aber dies wird hier durch den Befehl von dir wiederholt?)

@echo off & setlocal ENABLEDELAYEDEXPANSION
set "FOLDER=C:\Users\...\Desktop\Ordner"
set "FOLDEROUT=C:\Users\...\Desktop\Ordner"
if not exist "%C:\Users\...\Desktop\Ordner%" md "%C:\Users\...\Desktop\Ordner%"
for %%a in ("%FOLDER%\*.csv") DO @(
set /p line1=<"%%a"
echo !line1!>"%FOLDEROUT%\%%~nxa"
type "%%a" | find /v "!line1!">>"%FOLDEROUT%\%%~nxa"
)

a) Ist dies nun richtig?
b) der Befehl "md" erzeugt, wenn ich es richtig verstanden habe, für alle Dateien, die nicht *.csv, sind einen 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, ..... face-smile Wie bekomme ich meine neu erstellte Textdatei.cmd nun in cmd.exe?

Viele Liebe Grüße und tausend Dank!
Mitglied: 114757
114757 Apr 29, 2015 updated at 11:20:07 (UTC)
Goto Top
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 face-smile Das geht hier nicht, das Script ist nur für die Verwendung in einer Batchdatei gedacht.

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 ?
Mitglied: 114757
114757 Apr 29, 2015 updated at 11:24:41 (UTC)
Goto Top
Zitat von @Nelspruit:
1. ich habe deinen Text über den Link Quelltext kopiert
OK
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.
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!
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, ..... face-smile Wie bekomme ich meine neu erstellte Textdatei.cmd nun in cmd.exe?
Lerne erst mal die Grundlagen ...
Member: Nelspruit
Nelspruit Apr 29, 2015 at 11:42:30 (UTC)
Goto Top
HI Jodel,

vielen Dank und ja, ich bin absoluter Anfänger, allerdings dachte ich, dass ich hier mit meinen Fragen richtig wäre!

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 face-smile

Welches Forum würdest du mir denn für blutige Anfänger empfeheln?

Und abermals danke!
Mitglied: 114757
114757 Apr 29, 2015 updated at 13:04:55 (UTC)
Goto Top
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 face-smile
Ist ja klar wenn du die Variablen im Zeile 4 durch den Pfad ersetzt ...das geht so nicht

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.
Das ist die ganze Magie face-wink
Member: Nelspruit
Nelspruit Apr 29, 2015 at 13:19:51 (UTC)
Goto Top
Hey Jodel,

es hat geklappt, mega face-smile Das ist ja toll! Ganz herzlichen Dank für die Anfänger-gerechte Beschreibung! Schlage hier gerade innerlich Purzelbäume, dieser für dich kleine Trick macht mir vieles einfacher!

Habt ihr hier den irgendwo ein Platz für Anfänger, die ein wenig lernen/mitlesen wollen oder wäre es dann eher ein anderes Forum?

Viele Grüße
Mitglied: 114757
114757 Apr 29, 2015 updated at 13:29:24 (UTC)
Goto Top
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 face-smile
Mitglied: 114757
114757 Apr 30, 2015 updated at 07:55:20 (UTC)
Goto Top
Bitte den Beitrag dann noch als gelöst markieren. Danke.