CSV- Trennzeichen per Batch ändern für deutsches Excel
Servus,
ich bastle nun schon länger an einer Möglichkeit rum, die Delims in einer CSV- Datei (Wetterdaten) vom englischen Standard (Delims="," Dezimaltrennung=".") auf deutsch (Delims=";" Dezimaltrennung=",") umzubauen.
Leider gelingts mir nicht...
Die CSV sieht so aus (hier nur die erste Zeile (=Überschrift) und die ersten beiden Datenzeilen (können hunderte sein):
Es müssten also zuerst alle Kommas durch Semicolon ausgetauscht werden.
Dann müssten die Dezimaltrenner (".") durch Kommas getauscht werden, allerdings ohne dies beim Datum (Token 1) zu machen, da müssten die Punkte bleiben.
Ich habe versucht, zwei Dateien zu generieren, eine mit dem Datum und eine mit dem Rest, wobei ich beim "Rest" schon kläglich scheitere, weil ich keine Ahnung habe, wie man der Batch sagt, daß sie Token 2-38 "auslagern" soll, ohne daß man ""tokens=3,4,5,6,7,8,9,10...." schreibt...
...von Problemen wie dem, daß am Ende auch die Überschriftszeile wieder vorhanden sein muss, ganz zu schweigen...
Ein Beispiel, wie das zu bewerkstelligen ist, wäre natürlich genial...
Danke vorab!
Gruß - Toni
ich bastle nun schon länger an einer Möglichkeit rum, die Delims in einer CSV- Datei (Wetterdaten) vom englischen Standard (Delims="," Dezimaltrennung=".") auf deutsch (Delims=";" Dezimaltrennung=",") umzubauen.
Leider gelingts mir nicht...
Die CSV sieht so aus (hier nur die erste Zeile (=Überschrift) und die ersten beiden Datenzeilen (können hunderte sein):
,,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,38
30.12.2009,21:05,16.1,5.6,5.3,3.9,3.1,3,-20.6,42.3,4,4.7,0,0,0,0,0,0,52,86,83,0,0,0,0,0,0,90,0,0,0,0,0,0,918,0,.5,0,0
22.04.2014,09:27,17.5,10.5,22.8,4.5,8.8,100,58.5,42.6,9.3,14.3,0,0,0,0,0,0,52,82,99,0,0,0,0,0,0,75,0,0,0,0,0,0,932,0,0,0,0
Dann müssten die Dezimaltrenner (".") durch Kommas getauscht werden, allerdings ohne dies beim Datum (Token 1) zu machen, da müssten die Punkte bleiben.
Ich habe versucht, zwei Dateien zu generieren, eine mit dem Datum und eine mit dem Rest, wobei ich beim "Rest" schon kläglich scheitere, weil ich keine Ahnung habe, wie man der Batch sagt, daß sie Token 2-38 "auslagern" soll, ohne daß man ""tokens=3,4,5,6,7,8,9,10...." schreibt...
For /F "tokens=1 delims=," %%i in (probe.txt) do echo %%i %%j >>probe-teil1.txt
For /F "tokens=2,3,4 delims=," %%i in (probe.txt) do echo %%i %%j %%k >>probe-teil2.txt
Ein Beispiel, wie das zu bewerkstelligen ist, wäre natürlich genial...
Danke vorab!
Gruß - Toni
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 255528
Url: https://administrator.de/contentid/255528
Ausgedruckt am: 24.11.2024 um 22:11 Uhr
14 Kommentare
Neuester Kommentar
Moin,
was willst Du denn erreichen? Per Doppelklick die CSV-Datei mit Excel öffnen?
Wenn es keine Aktion ist, die immer wieder vorkommt kannst Du doch ganz einfach über Öffnen in Excel den Textkonvertierungsassistenten benutzen und alles einfach einstellen. Wenn Du es immer wieder benötigt gibts es noch freie Kommandozeilen-Tools wie z.B. CSV2XLS um so etwas hinzubekommen.
Henning
was willst Du denn erreichen? Per Doppelklick die CSV-Datei mit Excel öffnen?
Wenn es keine Aktion ist, die immer wieder vorkommt kannst Du doch ganz einfach über Öffnen in Excel den Textkonvertierungsassistenten benutzen und alles einfach einstellen. Wenn Du es immer wieder benötigt gibts es noch freie Kommandozeilen-Tools wie z.B. CSV2XLS um so etwas hinzubekommen.
Henning
Hallo Toni,
hatten wir hier schon einige male, für den direkten Import in Excel:
Alle CSV-Dateien in einem Ordner mit einem VBA Makro einlesen - Datumsformat weg??
oder verabschiede dich mal von Batch und mach das mit Powershell :
Grüße Uwe
hatten wir hier schon einige male, für den direkten Import in Excel:
Alle CSV-Dateien in einem Ordner mit einem VBA Makro einlesen - Datumsformat weg??
oder verabschiede dich mal von Batch und mach das mit Powershell :
(Import-csv 'C:\test.csv' -Delimiter "," | ConvertTo-Csv -NoTypeInformation -Delimiter ";") -replace '("-?\d+)\.(\d+")','$1,$2' | out-file 'C:\test_out.csv'
und in Batch etwa so:
(Für deinen Fall in dem in der Überschriftenzeile die ersten beiden Spaltennamen fehlen, angepasst)
Gruß jodel32
edit noch was korrigiert.
(Für deinen Fall in dem in der Überschriftenzeile die ersten beiden Spaltennamen fehlen, angepasst)
@echo off & setlocal ENABLEDELAYEDEXPANSION
set "eingabe=C:\daten.csv"
set "ausgabe=C:\daten_out.csv"
set header=
for /f "usebackq tokens=1,* delims=," %%a in ("%eingabe%") DO @(
set rest=%%b
set rest=!rest:,=;!
if not defined header (
set header=Datum;Zeit;%%a;!rest!
echo !header!>"%ausgabe%"
) else (
set rest=!rest:.=,!
echo %%a;!rest!>>"%ausgabe%"
)
)
edit noch was korrigiert.
Öhm was verwendest du hier für Pfadnamen mit einem @ am Anfang ??
-Edit-
Hmm, dein Eingabefile scheint in der Überschriftenzeile komisch zu sein (eventuell doppelte Überschriften für zwei Spalten ? läuft hier mit deinem Demodaten von oben einwandfrei !
Warum sind die ersten beiden Spalten deiner Überschriftenzeile leer ? Oder du hast den Code nicht korrekt kopiert überprüfe ihn nochmal.
Bei ganz harten Fällen geht's auch so:
oder so
-Edit-
Hmm, dein Eingabefile scheint in der Überschriftenzeile komisch zu sein (eventuell doppelte Überschriften für zwei Spalten ? läuft hier mit deinem Demodaten von oben einwandfrei !
Warum sind die ersten beiden Spalten deiner Überschriftenzeile leer ? Oder du hast den Code nicht korrekt kopiert überprüfe ihn nochmal.
Bei ganz harten Fällen geht's auch so:
((gc 'c:\Daten.csv' | %{'"' + $_ + '"'}) -replace ',','";"') -replace '("-?\d*)\.(\d+")','$1,$2' | out-file 'C:\Daten_out.csv'
gc 'c:\Daten.csv' | %{$line = $_.Replace(',',';').Split(';',2); ($line + ';' + $line[1].Replace('.',','))} | out-file 'C:\Daten_out.csv'
Da die Powershell erst ab Win7 verfügbar ist
Die lässt sich problemlos auch in XP nachrüsten http://support.microsoft.com/kb/968929/de-de
Zitat von @leknilk0815:
@114757:
Servus und danke für die Arbeit, die Batch funktioniert (fast) wie gewünscht.
Einziges Manko: in der ersten Zeile der Quelldatei (=Spaltenbeschreibung) sind am Anfang zwei ",,", die ebenfalls in
";;" umgewandelt werden sollen.
Die Batch macht daraus leider (in Worten!): "Datum;Zeit;" - der Rest passt.
Kann man das vielleicht noch ändern?
Gruß - Toni
Na den Code einmal durchzulesen, kann man eigentlich schon erwarten, dann weißt du wo du was ändern musst, dafür sollten rudimentäre Batchkenntnisse ausreichen. Tipp: Siehe Zeile 9 !@114757:
Servus und danke für die Arbeit, die Batch funktioniert (fast) wie gewünscht.
Einziges Manko: in der ersten Zeile der Quelldatei (=Spaltenbeschreibung) sind am Anfang zwei ",,", die ebenfalls in
";;" umgewandelt werden sollen.
Die Batch macht daraus leider (in Worten!): "Datum;Zeit;" - der Rest passt.
Kann man das vielleicht noch ändern?
Gruß - Toni
Das schafft sogar mein Sohneman
Gruß jodel32
Die paar XPler sterben auch bald aus ... Zur Info: Batch ist in den nächsten 3,4 Jahren in neueren Windows OS abgekündigt ! Habe ich auf einer MS Konferenz mitbekommen, Powershell wird sie ablösen, also rechtzeitig mal was Neues lernen sonst verpasste den Anschluss.