falkit
Goto Top

CSV-Datei Komma durch Semikolon ersetzen

Hi Zusammen,
ich suche eine Möglichkeit in einer Komma getrennten CSV Datei alle Kommas die als Trenner dienen durch ein Semikolon zu ersetzen.
Das Problem hierbei ist, dass in der Datei auch Komma getrennte Werte auftauchen, bei denen kein Semikolon gesetzt werden Darf.

Bsp:

aus
"Artikel","Menge","Preis"
"Hammer","10","1,50"

soll
"Artikel";"Menge";"Preis"
"Hammer";"10";"1,50"

werden. Das ganze sollte automatisch ablaufen, also nicht Excel starten und die Datei mit einem anderen Trennzeichen abspeichern (fall Excel diese Funktion bietet).
Ist sicherlich ein Problem, welches häufiger auftritt, hat hier jemand eine Lösung?

Danke schon mal

Falk

Content-Key: 263990

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

Printed on: April 18, 2024 at 12:04 o'clock

Member: Xaero1982
Xaero1982 Feb 19, 2015 at 19:09:50 (UTC)
Goto Top
Moin,

nichts für Ungut, aber google?
Richtig, es tritt häufiger auf und wurde hier schon xx mal diskutiert.

Und wenn du einen String suchst, der das besagt Komma bei "1,5" nicht ersetzt nimmst du "," und ersetzt es durch ";" Denn 1,5 hat kein ","

Grüße
Member: FalkIT
FalkIT Feb 20, 2015 at 08:41:12 (UTC)
Goto Top
Moin Xaero,
natürlich habe ich bei google schon nachgesehen, aber nichts gefunden was mein Problem wirklich löst.
Deine Lösung alle "," zu ersetzen hilft mir nicht weiter, da es natürlich auch Datensätze gibt, bei denen einige Werte nicht gefüllt sind.
Zum besseren Verständnis noch ein Beispiel:

"Artikel","Menge","Preis"
"Hammer","10","1,50"
"Schraube",,"0,80"

Trotzdem danke für die schnelle Antwort
Mitglied: 114757
Solution 114757 Feb 20, 2015 updated at 12:35:28 (UTC)
Goto Top
Moinsens,
as simple as that
powershell -Executionpolicy Bypass -command "&{$path = 'c:\daten.csv'; (Import-csv $path -Delimiter ',' -Encoding Default) | Export-Csv $path -Delimiter ';' -NoType -Encoding Default}"  
Gruß jodel32
Member: FalkIT
FalkIT Feb 20, 2015 at 10:59:34 (UTC)
Goto Top
Hi Jodel,
danke für die Antwort, wie ich den code verstehe geht das auf jeden Fall in die richtige Richtung, leider spuckt er mir aber einen Fehler aus. Von der Powershell habe ich leider keine Ahnung, kann daher nicht viel mit der Meldung bzw. mit den Befehlen in deiner Antwort anfangen. Kannst du hier noch einmal Helfen?
Folgende Fehlermeldung wird ausgegeben:
Import-Csv : Es wurde kein Parameter gefunden, der dem Parameternamen "Encoding" entspricht.  
Bei Zeile:1 Zeichen:69
+ &{$path = 'c:\daten.csv'; (Import-csv $path -Delimiter ',' -Encoding <<<<  Default) | Export-Csv  
 -NoType -Encoding Default}
    + CategoryInfo          : InvalidArgument: (:) [Import-Csv], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,Microsoft.PowerShell.Commands.ImportCsvCommand
Danke schon mal!

Falk
Mitglied: 114757
Solution 114757 Feb 20, 2015 updated at 13:37:56 (UTC)
Goto Top
Folgende Fehlermeldung wird ausgegeben:
dann hast du noch eine alte Powershell installiert (PS2.0), indem Fall lasse den Parameter -Encoding einfach weg:
powershell -Executionpolicy Bypass -command "&{$path = 'c:\daten.csv'; (Import-csv -Path $path -Delimiter ',') | Export-Csv -path $path -Delimiter ';' -NoTypeInformation -Encoding Default}"  
p.s. den Pfad zur CSV-Datei musst du natürlich anpassen ;-P
Member: FalkIT
FalkIT Feb 20, 2015 updated at 12:46:03 (UTC)
Goto Top
Vielen Dank, macht genau was es soll!!

Gruß
Falk

edit:
Leider doch noch nicht ganz, ich habe den selben Befehl nun auf die eigentliche CSV-Datei angewandt und bekomme folgende Meldung:
Import-Csv : Das Argument kann nicht verarbeitet werden, da der Wert des Arguments "name" ungültig ist. Ändern Sie den  
Wert des Arguments "name", und führen Sie den Vorgang erneut aus.  
Bei Zeile:1 Zeichen:60
+ &{$path = 'C:\Users\Ternum\Desktop\daten2.csv'; (Import-csv <<<<  $path -Delimiter ',') | Export-Csv $path -Delimiter  
 ';' -NoType}  
    + CategoryInfo          : InvalidArgument: (:) [Import-Csv], PSArgumentException
    + FullyQualifiedErrorId : Argument,Microsoft.PowerShell.Commands.ImportCsvCommand

Das "Argument "name"" gibt es weder in der CSV noch in deinem Befehl (zumindest nicht für mich ersichtlich). Hast du noch eine Idee wo hier das Problem liegt.

Danke!
Mitglied: 114757
114757 Feb 20, 2015 at 13:43:11 (UTC)
Goto Top
Das muss an deiner CSV-Datei liegen, vermutlich ist sie irgendwo fehlerhaft formatiert oder hat doppelte Spaltennamen.
Member: FalkIT
FalkIT Feb 20, 2015 at 14:04:18 (UTC)
Goto Top
Das war's, das vorletzte Feld verursacht den Fehler. Ich weiß nicht, was an dem Feld falsch sein soll, aber das sollte sich ja lösen lassen.

Vielen Dank und ein schönes Wochenende!

Falk