- ベストアンサー
CSVファイルの""内コンマの処理
以下のようなCSVファイルがあります。 xxx,yyy,"z,zz",XXX,"YY,Y",ZZZ,111,222 これを、 xxx,yyy,zzz,XXX,YYY,ZZZ,111,222 の様にperlで ""内のコンマを取りたいのですが、どうしたらよいでしょうか? xxx,yyy,z zz,XXX,YY Y,ZZZ,111,222 の様に""内コンマを別の文字に置き換えても可です。 よろしくお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
xxx,yyy,"z,zz",XXX,"YY,Y",ZZZ,111,222 の意味は xxx yyy z,zz XXX YY,Y ZZZ 111 222 と言う意味です。 CSVはアプリケーション依存ですから、excelのCSVとして { my $tmp = $line; $tmp =~ s/(?:\x0D\x0A|[\x0D\x0A])?$/,/; @values = map {/^"(.*)"$/ ? scalar($_ = $1, s/""/"/g, $_) : $_} ($tmp =~ /("[^"]*(?:""[^"]*)*"|[^,]*),/g); } です。★ただし内容に改行を含まない場合です。 ⇒ Perlメモ/CSV形式の行から値のリストを取り出す( http://www.din.or.jp/~ohzaki/perl.htm#CSV2Values ) より引用。 これをサブルーチンとして、$lineごとに呼び出せばよいでしょう。 while(<IN>){ my $line = $_; &csv2list($line); } >""内のコンマを取りたいのですが、どうしたらよいでしょうか? このサブルーチン内か、処理後に改めて行いますが、大体文字はよほど注意しないと他の文字と衝突します。