【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]

>

便利ですね。

(Visited 839 times, 1 visits today)

タグ : ,