【perlメモ】CSVファイルを簡単に処理できるCPANモジュールText::CSV_XS
text::CSV_XS[http://cpan.uwinnipeg.ca/search?query=text%3A%3ACSV_XS&mode=dist]
Text::CSV_XS
CSVファイルはエクセルなんかでよく使われる形式のテキストファイルですが、基本「,」(カンマ)区切りのテキストファイルです。単純な「,」(カンマ)区切りのファイルだといいのですが、実際にはデータ自体に「,」や「"」を含んでいたりすることもありそういうのを考慮すると実際に自前で処理しようとすると結構大変です。そういう場合に便利なのが「Text::CSV_XS」CPANモジュールです。
下のようなShift JISのCSVファイルがあるとき
text.csv
11111,"あいう,お""え",aaaaa
22222,"aaaaa,aaa""aa",bbbbb
33333,"山田 太郎",ccccc
下のような感じで簡単にCSVファイルを読み込めます。
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use Encode;
use Text::CSV_XS;
my $csv = Text::CSV_XS->new ({ binary => 1 }) or die "Cannot use CSV: ".Text::CSV->error_diag ();
open my $fh, "<:encoding(cp932)", "test.csv" or die "test.csv: $!";
while (my $row = $csv->getline ($fh)) {
my $item1 = encode(‘cp932’,$row->[0]);
my $item2 = encode(‘cp932’,$row->[1]);
my $item3 = encode(‘cp932’,$row->[2]);
print "[$item1][$item2][$item3]\n";
}
$csv->eof or $csv->error_diag ();
close $fh;
実行結果
下のような感じで、データに「,」や「"」が含まれるCSVファイルもちゃんと読み込めてます。
>text.pl
[11111][あいう,お"え][aaaaa]
[22222][aaaaa,aaa"aa][bbbbb]
[33333][山田 太郎][ccccc]
>
便利ですね。