2011年2月19日土曜日

perlでCSVファイルの読み込み。

概要
CSVファイルを読み込み、それを配列のハッシュにする方法について簡単にまとめます。

よみこむファイル
住所録や名簿てきなものではなく、キーによっては要素数が変わるようなものを想定してます。

ベアーズ,山田、鈴木、佐藤、
タイガース、田中、中田、中島、トム
ライオンズ、マイケル、ジャクソン、トーマス、ディック

住所録的なものはこちらで、
http://codezine.jp/article/detail/904?p=1

コード
my %hash;
foreach my $line( @list )
{
 chomp $line; 
 my ( $key, @items ) = split( /,/, $line );
 $hash{$key} = [@items];
}

ポイント(苦労した点)は9行目と10行目です。

まずは、my ( $key, @items ) = split( /,/, $line );です。
このような書き方で、CSVの最初の文字列を$keyという変数に、
2つ目の文字列以降を配列に代入することができます。

次に、$hash{$key} = [@items];です。
これでハッシュにキーとアイテム(配列)を追加しています。
※とりあえず動いてます。

コード(全部)
use strict;
use warnings;
#-------------------------

open(FH,"  < team.csv");
my @list = ;
close(FH);


my %hash;
foreach my $line( @list )
{
 chomp $line; 
 my ( $key, @items ) = split( /,/, $line );
 $hash{$key} = [@items];
} 

printhash( %hash );


#-------------------------
sub printhash
{
 my %hash = @_;
 foreach my $key( keys( %hash ) ) 
 {
     print "キー値 : $key\n";
     my @val = @{$hash{$key}};
     
     my $length = @val;
     print "length =$length\n";
     print "val = @val\n";
  }
}


出力結果
キー値 : タイガース
length =4
val = 田中 中田 中島 トム
キー値 : ベアーズ
length =3
val = 山田 鈴木 佐藤
キー値 : ライオンズ
length =4
val = マイケル ジャクソン トーマス ディック
0 件のコメント:
コメントを投稿