Perlでsplitを使ってCSVのデータをばらしていろいろやってたらどうもうまくいかないので
おかしいなと思ったら"foo,bar"みたいなカラムがあってほげらってしまっていた。
そこで Text::ParseWords
を使うと若干幸せになれるとのこと。
こういうCSVファイルがあったとする(hoge.csv)
aaa,bbb,"ccc,ddd",eee
aaa,bbb,"111,222",eee
こういう感じで処理してみると
#!/usr/bin/perl
use Text::ParseWords;
$file = "hoge.csv";
open (IN, $file) or die "$!";
while (<IN>) {
chomp ($_);
@data = &parse_line(',',1, $_);
print "$data[2]\n";
}
こうなる
"ccc,ddd"
"111,222"
"" がいらないなーという場合は parse_line
の2番めのパラメータを undef
する
@data = &parse_line(',',undef, $_);
そうするとこうなる
ccc,ddd
111,222