2017-11-13 2 views
-1

正規表現をどのようにして配列に適用しますか?私のcsvファイルで読んでいる間、私は...Perl組み込みコンマで効率的にCSVを解析し、データベースに追加する

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

これを適用しかし、私は私の多次元配列内のデータを入れた後、私は自分のフィールドに戻ってコンマを挿入する方法がわかりません。

+0

結果は、私の出力は次のようになります... "総農場値 - ジャガイモ(ドル×1000)" – kathleen

+0

は、私はあなたの質問に完全にないです。カンマを削除しても、それを元に戻したいですか? –

+0

joinを使ってみましたか? 'perldoc join ' –

答えて

0

まず、これを簡単に実現するために使用できるCSVモジュールがいくつかありますが、理由によってパッケージにアクセスできない、またはインストールできないことがあります。したがって、そうであれば、これは助けになるはずです。

カンマを埋め込んだCSVからフィールドを書き込もうとしている場合は、埋め込まれたコンマフィールドには見えないようにかっこや囲みを付ける必要がありますCSVのコンマ区切りフィールドとして使用します。 CSV内のすべてのデータを取得できます。

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

これらの埋め込まれコンマ:

"Potatoes 1,000", (Tomatoes, 200), "(GemSquash, 1,029.95)" 
     ^   ^    ^^ 
これらは、CSVのカンマを表示

:このケースでは、括弧、引用符を使用し、両方が埋め込まれたカンマを使用しているデータを表示するには、CSVを持っています

したがって、以下は括弧と二重引用符を使用してデータを検索して置き換え、どちらがcsvコンマで、埋め込まれているかを判別します。

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; 

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

CSVの解析には、Text::CSVのようなCPANモジュールを使用します。返される値に正規表現を使用することができます。

関連する問題