CSV mit Kommawerten aber wie

S

SchaubFD

Mitglied
Hallo,

ich habe ein Problem mit Kommawerten in CSV Dateien, stelle mir nun die Frage, ob man eine solche Datei vorher in eine TAB delimited Datei wandeln soll oder ob es eine einfache Funktion gibt (quasi Einzeiler), der aus den KOMMA ein TAB und die Gänsefüsschen entfernt bzw. eine saubere Trennung der Felder durchführt.

Beispiel:
Code:
"1,23",ABC,"ABC","4,56"

Soll zu folgendem werden:

Code:
1,23   ABC   ABC   4,56



Habe da was im Web entdeckt, komme aber mit dem Aufruf nicht zurecht.
Code:
my @x = split /,(?=[^\"]*(?:\"[^\"]*\"[^\"]*)*$)/;

Das Ergebnis sollte ein Array oder eine TAB delimited Zeile sein.
 
Zuletzt bearbeitet:
Reden wir von Perl?

Sieht fast so aus.

Als Einzeiler:
Code:
perl -anle 'print join "\t",(split /,(?=[^\"]*(?:\"[^\"]*\"[^\"]*)*$)/,$_)' inputfile
 
Hallo Wolfgang,

das sieht schon verdammt gut aus, Danke. Mir fehlt jetzt nur noch das Ersetzen der Gänsefüsschen.
 
ganz doof, aber nimm doch einfach die "suchen&ersetzen" - Funktion von deinem Editor!? :)

ciao

ps: wolfang, was bist du eigentlich fuer ein hax0r. jedem thread am programmierforum (ob bash oder sonst was) beantwortest du.. .was kannst du alles? (:
 
Im Gegensatz zu Einigen hier im Chat gibt Wolfgang immer vernünftige Antworten.
 
oh sorry Monsieur, nur weil meine Antwort vielleicht nicht auf deiner geistigen Ebene liegt.
Bevor ich mir den Kopf mache und irgendetwas scripte, versuche ich etwas zu benutzen was schon da ist. Und wenn ich meinen Editor sagen kann, das er aus
Code:
",
->
Code:
[Leerzeichen]
machen soll, dann nehme ich diese Lösung gerne an. Auch wenn sie vllt nicht ganz so elegant ist, wie die von Wolfang.

Und ja, sorry. Ich hätte dann das "ps" vielleicht auch per pm loswerden können.

ciao
 
Code:
perl -anle '$_=join "\t",(split /,(?=[^\"]*(?:\"[^\"]*\"[^\"]*)*$)/,$_);s/"//g;print' test3

Und nein, ich antworte nicht auf alle Threads.
;)

Gruß Wolfgang
 
Zurück
Oben