use utf8;
use Text-CSV_XS;
my @columns = qw/ id name age ken city /;
my $text = <<'_E';
"02547","佐藤大輔","25","北海道","苫小牧市"
"15983","田中久志","19","沖縄県","那覇市"
"00893","本間雅洋","29","神奈川県","横浜市"
_E
# $text から下記の配列を生成するにはどうすれば良いのでしょうか?
#
@array = (
{
id => '02547',
name => '佐藤大輔',
...
},
{
id => '15983',
name => '田中久志',
...
}, ... );
#!/usr/bin/perl
use strict;
use warnings;
use Text::CSV_XS; # or Text::CSV;
my @columns = qw/ id name age ken city /;
my $text = << '_E';
"02547","佐藤大輔","25","北海道","苫小牧市"
"15983","田中久志","19","沖縄県","那覇市"
"00893","本間雅洋","29","神奈川県","横浜市"
_E
my $csv = Text::CSV_XS->new({binary => 1});
$csv->combine(@columns);
my(@ret, @f, $hr, @col);
for (split(/\n/, $text)) {
$csv->parse($_);
@col = $csv->fields;
for (@columns) {
$hr->{$_} = shift @col;
}
push(@ret, $hr);
}
# print する
for my $r (@ret) {
for (keys %$r) {
print "$_ = $r->{$_}\n";
}
}
__END__
# ファイルの場合は
open(my $io, "./a.csv");
$csv->column_names(@columns);
my $hr = $csv->getline_hr($io);
for (keys %$hr) {
print "$_ = $hr->{$_}\n";
}
close($io);
# これでOK
shintaboさん、ありがとうございます!
ばっちり動きました。
結構べた書きする必要があるんですね。
$csv->new( column_names => \@columns );
$csv->parse($text);
print YAML::Dump( $csv->to_hash );
みたいな感覚で実現できるのでは?
などと見込んでおりました。
誰も回答してくれないので、そう簡単にはいかなさそう...
と、ちょっとがっかりしてたところです。
ご回答本当にありがとうございました。
ファイル入力バージョンまで書いていただき、ありがとうございます!
それにしても
$csv->combine( @columns );
て何してくれてるんでしょうかね... ?
コメントアウトしても結果同じ(成功)でした。