chris1987.1
Goto Top

Batch um erste Zeile einer CSV zu löschen

Hallo,

im Rahmen meiner Masterarbeit muss ich eine Vielzahl von csv Dateien untersuchen. Hierbei muss ich einige dieser Dateien zusammenfügen, wobei ich jedoch vorher von einigen Dateien die erste Zeile (Überschrift der Tabelle) löschen muss. Da es sich hier um csv Dateien handelt, die eine Größe zwischen 3 und 8 GB haben, ist es sehr schwer und vor allem dauert es sehr lange diese im Editor zu öffen und die Zeile manuell zu löschen und anschließend wieder abzuspeichern.
Gibt es eine Möglichkeit eine Batch zu erstellen, welche genau das Löschen der ersten Zeile erledigt? Am besten wäre, dass die Batch auch alle Dateien, bei denen das gemacht werden muss, bearbeitet. So könnte ich das Programm einfach mal über Nacht durchlaufen lassen.

Da ich mich echt schlecht mit solchen Dingen auskenne, wäre es wirklich hilfreich und nett, wenn die Antworten detailliert erklärt sind und ich das als Laie auch nachvollziehen und machen kann.

Vielen Dank im Voraus!!!!

Viele Grüße

Chris

Content-Key: 294504

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

Printed on: April 19, 2024 at 02:04 o'clock

Mitglied: 114757
114757 Jan 28, 2016 updated at 17:36:54 (UTC)
Goto Top
Moin,
Batch (ob die Batch mir solchen Dateigrößen klarkommt, keine Ahnung, probiers aus ... Wer um alles in der Welt produziert solch große CSV Files ??),
@echo off
for %%a in ("C:\ordner\*.csv") DO (  
    more /e +1 "%%a">"%%a.tmp"   
    del "%%a" && ren "%%a.tmp" "%%a"  
)
Powershell:
gci 'C:\Ordner\*.csv' | %{  
    gc $_.Fullname | select -skip 1 | out-file "$($_.FullName).tmp"  
    remove-item $_.FullName -Force; rename-item -Path "$($_.FullName).tmp" -NewName $_.FullName  
}
Gruß jodel32
Member: chris1987.1
chris1987.1 Jan 28, 2016 at 22:52:11 (UTC)
Goto Top
hey jodel,

zuerst einmal vielen Dank für die Antwort. Mit der Batch funktioniert es leider nicht. Es bricht bei Zeile 65.535 ab (zufällig oder auch nicht genau die Anzahl an Zeilen die EXCEL verarbeiten kann?!).
Jetzt wollte ich noch mal deine Powershell Lösung versuchen. Das Problem ist leider, dass ich mich damit überhaupt nicht auskenne. Muss ich denn für " _.Fullname" irgend einen Namen einfügen oder kann ich das genauso kopieren und ausführen, weil irgendwie funktioniert das nicht.
Vielleicht hast du ja auch eine ganz andere Lösung für mich?!

Vielen Dank!

Gruß Chris
Mitglied: 114757
114757 Jan 28, 2016 updated at 23:15:43 (UTC)
Goto Top
Mit der Batch funktioniert es leider nicht. Es bricht bei Zeile 65.535 ab
Wird dann wohl ein Limit der Batch bzw. vom more Befehl sein.

Muss ich denn für " _.Fullname" irgend einen Namen einfügen
Nein, nur oben den Ordner wo die CSV-Dateien liegen musst du anpassen sonst nichts!
weil irgendwie funktioniert das nicht.
Doch das tut es! Funktioniert hier wie immer einwandfrei, mach das ja schon ewig...

Wahrscheinlich hast du die Executionpolicy noch nicht freigeschaltet.
Aber "funktioniert nicht" ist in einem Admin-Forum keine Fehlemeldung, sorry ! face-sad

Vielleicht hast du ja auch eine ganz andere Lösung für mich?!
Noch mehr?? Gar keine Ansprüche was ...
ich könnte dir jetzt hier das ganze noch in 10 Weiteren Programmiersprachen Posten, aber wozu wenn es die Powershell ja erledigt...
Member: chris1987.1
chris1987.1 Jan 29, 2016 at 00:22:53 (UTC)
Goto Top
Es hat geklappt !!! Vielen vielen Dank nochmals. Nur eine kliene Sache noch. Mir ist aufgefallen, dass die Datei jetzt genau doppelt so groß ist wie vorher. Ich hab irgendwo nachgelesen, dass das mit der Codierung zusammenhängt. Gibt es eine Lösung um dies zu umgehen?

Vielen dank!
Mitglied: 114757
114757 Jan 29, 2016 updated at 08:23:22 (UTC)
Goto Top
Zitat von @chris1987.1:

Es hat geklappt !!! Vielen vielen Dank nochmals. Nur eine kliene Sache noch. Mir ist aufgefallen, dass die Datei jetzt genau doppelt so groß ist wie vorher. Ich hab irgendwo nachgelesen, dass das mit der Codierung zusammenhängt. Gibt es eine Lösung um dies zu umgehen?
Ja das liegt an der Codierung, die PS verwendet hier Uniode und das braucht natürlich doppelt so viel Platz pro Charakter, das kannst du aber an die Kodierung deiner Dateien anpassen in den du folgende Zeile so schreibst, den Code hängst du am Ende an, für pure ASCII Files so
gc $_.Fullname | select -skip 1 | set-Content "$($_.FullName).tmp" -Encoding ASCII  
http://ss64.com/ps/set-content.html
Member: chris1987.1
chris1987.1 Jan 29, 2016 at 09:11:47 (UTC)
Goto Top
Giuten Morgen und vielen Dank! Ich kam gestern nacht noch selbst auf Lösung face-wink