2010年3月14日日曜日

PHPでCSVの処理をする

今だによく使わるが意外と処理が面倒なCSV。なぜなら、CSVではデータ内部に「改行」が許されているので、単純に「1行ずつ読み込んでカンマで分割」で読み込むと、次のようなデータは正しく認識されなくなる。

"aaa
bbb","ccc"

そこで、Perlの場合にはText::CSV_XSを使って次のように読み込む。

use Text::CSV_XS;
use IO::File; 
my $csv = Text::CSV_XS->new( {binary => 1} );
my $fhIn = IO::File->new( "a.csv" ) || die ( "cannot open file: $!" );
while ( not $fhIn->eof ) {
    my $columns = $csv->getline( $fhIn ); # 配列のリファレンス
}
参考

さて、同じことはPHPのfgetcsvでもできるか検証してみた。用意したスクリプトは次の通り

<?php
$fh = fopen( "a.csv", "r" );
$list = fgetcsv( $fh );
print_r( $list );
?>

そして結果はこちら

Array
(
    [0] => aaa
bbb
    [1] => ccc
)

配列の一つ目に「aaa<改行>bbb」が入っていることが確認できた。なんだ、PHPも結構使えるではないか。

0 件のコメント:

コメントを投稿