1

友達 スプレッドシートに変換する必要がある 2 つの CSV ファイルがあります。次のデータが含まれています。

"xxx","yyy","97,234"
     .
     .
     .

abc,def,"23,475"
       .
       .
       .
       .

問題は、この csv ファイルを開いて、各レコードを別のファイルに書き込む必要があることです。これsplit(,@lines)により、すべてのコンマ区切りの値が分割されるため、分割機能を試してみました。この方法では 2 番目のファイルがサポートされない別の方法を試しました。perlsplit(",@lines)を使用してこのケースを処理する方法

4

3 に答える 3

3

Text::CSV を使用して CSV ファイルを解析します。Text::CSV の使用例は次のとおりです。

#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV;
$\="\n";

open my $fh, '<', 'file.csv' or die $!;
my $csv=Text::CSV->new;
while(<$fh>){
        $csv->parse($_);
        my @fields=$csv->fields();
}
close $fh;

配列@fieldsには、csv ファイルの個々の列がすべて含まれています。

于 2013-03-22T09:48:49.237 に答える
2

2つのCSVファイルから3番目のファイルにすべてのレコードをコピーする必要がある場合は、データを分割する必要はありません。レコードレベルでデータを読み書きするだけです。

説明していない何らかの理由で、データをフィールドに分割する必要がある場合は、Text::CSVモジュールを使用して分割する必要があります。正規表現を使用してCSVデータを分割しようとすると、一般的に正しく理解するのが難しく、モジュールが試されてテストされます。

于 2013-03-22T09:46:42.403 に答える
-1

出力に含めたくない場合"

my @values = $line =~ /\"?(\w+)\"?,\"?(\w+)\"?,\"?([\d,]+)\"?/

いずれかを削除し"、テキスト/数値を配列 @values に保存します。これを印刷できます。

print join(";", @values) . "\n";

;セパレーターとして印刷します。あなたの質問から2行を実行すると、次の出力が得られます。

$ ./testregexp.pl 
xxx;yyy;97,234
abc;def;23,475
于 2013-03-22T09:38:25.243 に答える