Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

CSV- Trennzeichen per Batch ändern für deutsches Excel

Frage Entwicklung Batch & Shell

Mitglied: leknilk0815

leknilk0815 (Level 3) - Jetzt verbinden

21.11.2014, aktualisiert 22.11.2014, 2438 Aufrufe, 14 Kommentare

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):
01.
,,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 
02.
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 
03.
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
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...
01.
For /F "tokens=1 delims=," %%i in (probe.txt) do echo %%i  %%j >>probe-teil1.txt
01.
For /F "tokens=2,3,4 delims=," %%i in (probe.txt) do echo %%i  %%j  %%k >>probe-teil2.txt
...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
Mitglied: vossi31
21.11.2014, aktualisiert um 13:52 Uhr
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
Bitte warten ..
Mitglied: colinardo
21.11.2014, aktualisiert um 21:15 Uhr
Hallo Toni,
hatten wir hier schon einige male, für den direkten Import in Excel:
http://www.administrator.de/forum/alle-csv-dateien-in-einem-ordner-mit- ...

oder verabschiede dich mal von Batch und mach das mit Powershell :
01.
(Import-csv 'C:\test.csv' -Delimiter "," | ConvertTo-Csv -NoTypeInformation -Delimiter ";") -replace '("-?\d+)\.(\d+")','$1,$2' | out-file 'C:\test_out.csv'
Grüße Uwe
Bitte warten ..
Mitglied: leknilk0815
21.11.2014 um 16:43 Uhr
Zitat von colinardo:
oder verabschiede dich mal von Batch und mach das mit Powershell :

Servus Uwe,
danke mal, Powershell kannte ich noch nicht, habs aber mal probiert - mit mäßigem Ergebnis, mit dem ich alleine auch nicht weiterkomme, da ich der Syntax und damit der Fehlermeldung etwas hilflos gegenüberstehe...
Daher wollte ich auch mit Batch arbeiten, weil ich das zwar auch nicht gerade im Schlaf beherrsche, aber zumindest in der Lage bin, einen vorgefertigten Code auf meine Bedürfnisse anzupassen (damit meine ich nicht nur Pfadangaben...)
Wenn sich jemand "erbarmen" würde, mir da etwas zu schnipseln, wäre ich sehr dankbar.
@Henning
mit Excel hat das nichts zu tun, da kann ich mir selber helfen. Man könnte die Anpassung natürlich "schnell mal" auch mit Notepad oder/und Excel machen, aber wenn man das häufiger macht ist eine Batch (deren Arbeitsweise man versteht!) weit komfortabler.
Dafür jedoch ein Tool unbekannter Herkunft auf die Kiste zu packen ist eher ungut, zumal man eine Batch schnell mal an einen Wetterkollegen weitergeben kann, ein fremdes Tool würde die Sache unnötig komplizieren und wer weiß schon, was die kostenlosen Dinger sonst noch so treiben...
Aber trortzdem Dank für Deine Mühe!

Gruß - Toni

Hier noch das "Ergebnis" von Powershell:
01.
PS C:\> (Import-csv 'C:\@tmp\@csv-konvertierung\powershell\WetterAktuell.csv' -Delimiter "," | ConvertTo-Csv -NoTypeInformation -Delimiter ";" -Encoding UTF8) - 
02.
replace '("\d+)\.(\d+")','$1,$2' | out-file 'C:\@tmp\@csv-konvertierung\powershell\test_out.csv' 
03.
--------------------------------------------------------------- 
04.
ConvertTo-Csv : Es wurde kein Parameter gefunden, der dem Parameternamen "Encoding" entspricht. 
05.
Bei Zeile:1 Zeichen:145 
06.
+ (Import-csv 'C:\@tmp\@csv-konvertierung\powershell\WetterAktuell.csv' -Delimiter "," | ConvertTo-Csv -NoTypeInformation -Delimiter ";" -Encoding <<<<  UTF8) 
07.
 -replace '("\d+)\.(\d+")','$1,$2' | out-file 'C:\@tmp\@csv-konvertierung\powershell\test_out.csv' 
08.
    + CategoryInfo          : InvalidArgument: (:) [ConvertTo-Csv], ParameterBindingException 
09.
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.ConvertToCsvCommand
Bitte warten ..
Mitglied: colinardo
21.11.2014, aktualisiert um 17:51 Uhr
Hier noch das "Ergebnis" von Powershell:
Sorry,war nur ein Parameter zu viel, ist oben geändert
Bitte warten ..
Mitglied: 114757
LÖSUNG 21.11.2014, aktualisiert 22.11.2014
und in Batch etwa so:
(Für deinen Fall in dem in der Überschriftenzeile die ersten beiden Spaltennamen fehlen, angepasst)
01.
@echo off & setlocal ENABLEDELAYEDEXPANSION 
02.
set "eingabe=C:\daten.csv" 
03.
set "ausgabe=C:\daten_out.csv" 
04.
set header= 
05.
for /f "usebackq tokens=1,* delims=," %%a in ("%eingabe%") DO @( 
06.
  set rest=%%b 
07.
  set rest=!rest:,=;! 
08.
  if not defined header ( 
09.
        set header=Datum;Zeit;%%a;!rest! 
10.
	echo !header!>"%ausgabe%" 
11.
  ) else ( 
12.
 	set rest=!rest:.=,! 
13.
  	echo %%a;!rest!>>"%ausgabe%" 
14.
15.
)
Gruß jodel32

edit noch was korrigiert.
Bitte warten ..
Mitglied: leknilk0815
21.11.2014, aktualisiert um 20:52 Uhr
Zitat von colinardo:
Sorry,war nur ein Parameter zu viel, ist oben geändert
Danke für die Korrektur
...nun kommt die Meldung in abgeänderter Form...

01.
Import-Csv : Das Element "0" ist bereits vorhanden. 
02.
Bei Zeile:1 Zeichen:12 
03.
+ (Import-csv <<<<  'C:\@tmp\@csv-konvertierung\powershell\WetterAktuell.csv' - 
04.
Delimiter "," | ConvertTo-Csv -NoTypeInformation -Delimiter ";") -replace '("\d 
05.
+)\.(\d+")','$1,$2' | out-file 'C:\@tmp\@csv-konvertierung\powershell\test_out. 
06.
csv' 
07.
    + CategoryInfo          : NotSpecified: (:) [Import-Csv], ExtendedTypeSyst 
08.
   emException 
09.
    + FullyQualifiedErrorId : AlreadyPresentPSMemberInfoInternalCollectionAdd, 
10.
   Microsoft.PowerShell.Commands.ImportCsvCommand
Bitte warten ..
Mitglied: colinardo
LÖSUNG 21.11.2014, aktualisiert 22.11.2014
Zitat von leknilk0815:
Danke für die Korrektur
...nun kommt die Meldung in abgeänderter Form...
Ö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:
((gc 'c:\Daten.csv' | %{'"' + $_ + '"'}) -replace ',','";"') -replace '("-?\d*)\.(\d+")','$1,$2' | out-file 'C:\Daten_out.csv'
oder so
gc 'c:\Daten.csv' | %{$line = $_.Replace(',',';').Split(';',2); ($line[0] + ';' + $line[1].Replace('.',','))} | out-file 'C:\Daten_out.csv'
Bitte warten ..
Mitglied: leknilk0815
22.11.2014 um 09:33 Uhr
@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
Bitte warten ..
Mitglied: leknilk0815
22.11.2014 um 09:34 Uhr
@colinardo:
vielen Dank auch Dir, die letzte Version funktioniert mit allen Schikanen.
Leider gibts aber noch viele Leute, die als Wetterrechner WIN XP laufen haben.
Da die Powershell erst ab Win7 verfügbar ist, werde ich wohl lieber die Batch von jodel32 bevorzugen (sofern das mit den beiden ersten Spaltenüberschriften in den Griff zu bekommen ist), weils mit Batch halt keine "Kompatibilitätsprobleme" giben würde.
<quote>Öhm was verwendest du hier für Pfadnamen mit einem @ am Anfang ??</quote>
das "@" am Anfang verwende ich, weil in der Listung vom Explorer ein "@" das Verzeichnis ganz oben aufhängt. Ist bei Tests übersichtlicher...
Bitte warten ..
Mitglied: colinardo
22.11.2014 um 11:56 Uhr
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
Bitte warten ..
Mitglied: 114757
22.11.2014, aktualisiert um 12:02 Uhr
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 !
Das schafft sogar mein Sohneman

Gruß jodel32
Bitte warten ..
Mitglied: leknilk0815
22.11.2014 um 12:15 Uhr
Zitat von 114757:
Tipp: Siehe Zeile 9 !
Das schafft sogar mein Sohneman
Danke, läuft.
Bitte warten ..
Mitglied: leknilk0815
22.11.2014 um 12:19 Uhr
Servus,
daß man das "nachrüsten" kann, war schon klar, aber genau das soll ja vermieden werden.
Bei einer Batch ist es praktisch egal, welches MS- OS läuft, die geht überall. Daher brauchts keine Erklärungen, was man alles erst erledigen muss, bevor man eine CSV konvertieren kann.
So - Thema erledigt, ich bin voll zufrieden und hab wieder was gelernt.

Danke an euch beide und Gruß - Toni
Bitte warten ..
Mitglied: 114757
22.11.2014, aktualisiert um 12:29 Uhr
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.
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(1)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Batch & Shell
gelöst Datum per batch ändern in Tagen (2)

Frage von crawnby zum Thema Batch & Shell ...

Batch & Shell
gelöst 1 PDF duplizieren und umbenennen nach CSV mittels Batch (5)

Frage von Kalisser zum Thema Batch & Shell ...

IDE & Editoren
gelöst IP und DNS per Batch ändern (9)

Frage von andyw5 zum Thema IDE & Editoren ...

Batch & Shell
Batch zum bearbeiten mehrerer CSV (2)

Frage von Matzus87 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
LAN, WAN, Wireless
gelöst Server erkennt Client nicht wenn er ausserhalb des DHCP Pools liegt (28)

Frage von Mar-west zum Thema LAN, WAN, Wireless ...

Outlook & Mail
Outlook 2010 findet ost datei nicht (18)

Frage von Floh21 zum Thema Outlook & Mail ...

Windows Server
Server 2008R2 startet nicht mehr (Bad Patch 0xa) (18)

Frage von Haures zum Thema Windows Server ...