2017-01-04 3 views
-2

Ich habe einige CSV-Dateien, die falsch exportiert wurden. Einige Felder, die Zahlen enthalten, wurden fälschlicherweise als Zeichenfolgen mit der Dezimalstelle als Komma anstelle eines Punkts exportiert.Komplexe Regex, um Kommas durch Punkte für zitierte Werte zu ersetzen, dann entfernen Sie die Anführungszeichen

Hier ein paar Beispiele:

"GREEN,"15,4",55,"15,5",64,"17,0","18,9",107,145,21,38, "BLUE","15,1",46,"15,2",51,"11,4","13,5",89,96,25,7,

Also, ich die Kommas Punkte für Zahlen in Anführungszeichen wechseln will und dann die Anführungszeichen aus allen Zahlen entfernen.

Kann mir bitte jemand hier helfen?

+5

Wenn Sie zeigen, dass Sie selbst versucht haben, das Problem zu lösen, werden Ihnen die Leute viel großzügiger helfen. – fugu

+1

Ihr Beispiel ist ** verwirrend **, welche Zahlen sind von Zitaten umgeben? –

+0

@Meninx Ich denke, die Werte wie '" 15,4 "' sollten "15.4" ohne die Anführungszeichen werden. – michaPau

Antwort

3

Verwenden Sie eine CSV-Parser, und dies wird einfach:

#!/usr/bin/perl 
use warnings; 
use strict; 

use Text::CSV_XS; 

my $csv = Text::CSV_XS->new({ binary => 1, auto_diag => 1 }); 

while (my $row = $csv->getline(\*DATA)) { 
    s/,/./ for @$row; 
    $csv->say(\*STDOUT, $row); 
} 


__DATA__ 
"GREEN","15,4",55,"15,5",64,"17,0","18,9",107,145,21,38, 
"BLUE","15,1",46,"15,2",51,"11,4","13,5",89,96,25,7, 

Beispiel oben reihten Daten verwendet es runnable Standalone zu machen - Sie werden wahrscheinlich eine Ein- und Ausgabedatei verwenden möchten, anstatt von DATA und STDOUT.

Wenn Sie die Anführungszeichen um die "Strings" herum behalten möchten, aber nicht über die "Numbers", können Sie keep_meta_info verwenden oder sie einfach neu hinzufügen, wenn sie benötigt werden.

+0

Warum der Downvote? Das ist die richtige Lösung! – Toto

+0

Vielleicht ist die Regex zu generisch und könnte eine legitime Zeichenfolge entsprechen? –

Verwandte Themen