Perlでハッシュのデータ配列を作成(すぐ忘れるのでメモ)
毛利です。
やり方をいつも忘れてしまうので私的メモ。
1行目が↓こんな感じ、2行目以降がデータ行となってる .csv ファイルを処理。
(DoCoMo の datalink のエクスポートファイル)
"メモリNo","名前","フリガナ","電話1","メール1","郵便番号","住所","メモ","誕生日","URL","会社名","役職名","電話2","メール2","電話3","メール3","電話4","メール4","電話5","メール5","緯度","経度","SIPアドレス1","SIPアドレス2","SIPアドレス3","2in1設定","グループNo","グループ名"
ソース
#!/usr/bin/env perl use strict; use Data::Dumper; my @aryHeader; my @aryDb; while(<>){ s/\"//g && chomp; my @data = split(/,/); if ( 0 == scalar @aryHeader ){ @aryHeader = @data; next; } my $refPerson; for(my $i = 0; $i < scalar @aryHeader; $i++){ $refPerson->{$aryHeader[$i]} = $data[$i]; } push(@aryDb, $refPerson); } print Dumper(@aryDb); exit;
※ 推奨コードというわけではありません。なんかいいデータの扱い方があれば教えて下さい
※ 変数名の付け方とか我流。Perl のベストプラクティス買わないとなぁ。読む時間もお金も無いからまた今度。。
- 作者: Damian Conway,クイープ
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2006/08/24
- メディア: 大型本
- 購入: 11人 クリック: 153回
- この商品を含むブログ (155件) を見る
出力例(Dumper)
chmod +x tmp.pl ./tmp.pl data.csv
$VAR400 = { 'メモリNo' => '215', 'SIPアドレス2' => '', '誕生日' => '', 'フリガナ' => '*****', '住所' => '', '郵便番号' => '', '経度' => '', '電話1' => '090*******', 'メール1' => '', 'SIPアドレス3' => '', '役職名' => '', 'グループ名' => '仕事', '緯度' => '', '電話5' => '', 'メモ' => '', 'URL' => '', 'メール3' => '', '電話3' => '', '2in1設定' => '', 'メール2' => '', 'グループNo' => '4', 'メール4' => '', 'メール5' => '', '電話4' => '', 'SIPアドレス1' => '', '名前' => '**さん', '電話2' => '', '会社名' => '' };
なぜ忘れるのか
$refPerson->{$aryHeader[$i]} = $data[$i];
↑の部分の処理(リファレンス->{ハッシュキー}=データ)でデータができてしまう(事前にメモリ確保とかが要らない)のに慣れないみたい。
ではでは。