プロが教える店舗&オフィスのセキュリティ対策術

以下のような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

の様に""内コンマを別の文字に置き換えても可です。

よろしくお願いします。

A 回答 (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);
}

>""内のコンマを取りたいのですが、どうしたらよいでしょうか?
 このサブルーチン内か、処理後に改めて行いますが、大体文字はよほど注意しないと他の文字と衝突します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!