2017-11-13 10 views
-1

Wie wenden Sie reguläre Ausdrücke auf ein Array an. Während in meiner CSV-Datei zu lesen angewendet ich diese ...Perl Parsing CSV Effizient mit eingebetteten Kommas und Hinzufügen zur Datenbank

 s/, /- /g; 
     s/1,000/1000/g; 

Aber nachdem ich die Daten in meinem mehrdimensionales Array setzen weiß ich nicht, wie die Kommas auf meine Felder einfügen zurück.

+0

Meine Ausgabe wie folgt aussieht ... "Total Farm wert- Kartoffeln (Dollar x 1000)" – kathleen

+0

Ich bin nicht vollständig mit Ihrer Frage. Sie entfernen das Komma, möchten es aber wieder zurückstellen? –

+0

Haben Sie bei der Verwendung von Join nachgesehen? 'perldoc join' –

Antwort

0

Erstens gibt es ein paar CSV-Module, die Sie verwenden können, um dies leicht zu erreichen, aber in einigen Fällen weiß ich, dass Menschen keinen Zugriff auf Pakete haben oder keine installieren können. Daher sollte dies helfen, wenn dies der Fall ist.

Wenn ich Sie richtig verstehe, versuchen Sie Felder aus CSV zu schreiben, die Kommas enthalten. Wenn dies der Fall ist, sollten diese eingebetteten Kommafelder Klammern oder Anführungszeichen haben, um sicherzustellen, dass sie nicht gesehen werden als CSA-Felder mit Trennzeichen. Wir können dann einfach alle Daten in Ihrer CSV-Datei erfassen. In diesem Fall werden wir eine csv, die Klammern verwendet, Zitate und beiden Daten anzuzeigen, die eingebetteten Kommas verwendet:

Diese das CSV Komma zeigen:

"Potatoes 1,000", (Tomatoes, 200), "(GemSquash, 1,029.95)" 
       ^   ^

Diese sind eingebettet Komma:

"Potatoes 1,000", (Tomatoes, 200), "(GemSquash, 1,029.95)" 
     ^   ^    ^^ 

Also die unten suchen und ersetzen die Daten mit den Klammern und die Anführungszeichen, um zu bestimmen, welche csv Kommas und die eingebettet sind.

use strict; 
use warnings; 

my $string = '(Potatoes 1,000), "Tomatoes, 200", "(GemSquash, 1,029.95)"'; 
my $query = qr/(?: "\(([^()""]*) \)" | \(([^()]*) \) | " ([^"]*) " | ([^,]*)) , \s* /x; 
my @results = grep defined, "$string," =~ /$query/g; 
print "$_\n" for @results; 

ERGEBNISSE

Potatoes 1,000 
Tomatoes, 200 
GemSquash, 1,029.95 
-2

Verwenden Sie zum Analysieren von CSV ein CPAN-Modul wie Text::CSV. Sie können die Regex für die zurückgegebenen Werte verwenden.