• ベストアンサー

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 の様に""内コンマを別の文字に置き換えても可です。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.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); } >""内のコンマを取りたいのですが、どうしたらよいでしょうか?  このサブルーチン内か、処理後に改めて行いますが、大体文字はよほど注意しないと他の文字と衝突します。