人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【Perl】Text-CSV_XS の使い方を教えてください。

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 => '田中久志',
...
}, ... );

●質問者: radio3
●カテゴリ:コンピュータ
✍キーワード:ken name Perl w/ 佐藤大輔
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● shintabo
●60ポイント ベストアンサー

#!/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 );

て何してくれてるんでしょうかね... ?

コメントアウトしても結果同じ(成功)でした。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ