概要
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];
- }
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 = <fh>;
- 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";
- }
- }
- </fh>
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 = マイケル ジャクソン トーマス ディック