Processing math: 100%

2011年2月19日土曜日

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

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

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

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

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

コード
  1. my %hash;  
  2. foreach my $line( @list )  
  3. {  
  4.  chomp $line;   
  5.  my ( $key, @items ) = split( /,/, $line );  
  6.  $hash{$key} = [@items];  
  7. }  

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

まずは、my ( key, @items ) = split( /,/, line );です。
このような書き方で、CSVの最初の文字列をkeyという変数に、 2つ目の文字列以降を配列に代入することができます。 次に、hash{$key} = [@items];です。
これでハッシュにキーとアイテム(配列)を追加しています。
※とりあえず動いてます。

コード(全部)
  1. use strict;  
  2. use warnings;  
  3. #-------------------------  
  4.   
  5. open(FH,"  < team.csv");  
  6. my @list = <fh>;  
  7. close(FH);  
  8.   
  9.   
  10. my %hash;  
  11. foreach my $line( @list )  
  12. {  
  13.  chomp $line;   
  14.  my ( $key, @items ) = split( /,/, $line );  
  15.  $hash{$key} = [@items];  
  16. }   
  17.   
  18. printhash( %hash );  
  19.   
  20.   
  21. #-------------------------  
  22. sub printhash  
  23. {  
  24.  my %hash = @_;  
  25.  foreach my $key( keys( %hash ) )   
  26.  {  
  27.      print "キー値 : $key\n";  
  28.      my @val = @{$hash{$key}};  
  29.        
  30.      my $length = @val;  
  31.      print "length =$length\n";  
  32.      print "val = @val\n";  
  33.   }  
  34. }  
  35. </fh>  


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