キッズプレート、パスタおかわり

プログラミングやデジモノについてあれこれ
--.--.-- --:--|カテゴリ:スポンサー広告| コメント(-)

スポンサーサイト


上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2009.10.15 11:08|カテゴリ:Perlコメント(0)

Perlでなんちゃってオブジェクト指向2「データへのアクセスを解りやすくする」


 前回は読み込んだレコードを一つのデータの塊として操作する方法を学びました。処理に利用したデータは以下のようなデータです。

00,A君,13,12,3
01,B君,7,11,7
02,C君,8,4,1
03,D君,3,5,5

「ID,名前,年齢,誕生日(月),誕生日(日)」という並びのデータです。これらを読み込んで一つのデータの塊として捉え「$Menber{$key}[0]」なんていう感じでデータにアクセスしていました。でも、
「えーと、名前は配列の何番目だっけ?。。。あぁ、2番目か、じゃあ$Menber{$key}[1]だな」
 なんていうアクセスの仕方は正直やりにくいですよね。名前が欲しいなら、
「名前くれ」
 って呼び出したい。そこで項目名を直接指定して、それぞれのデータにアクセスする方法を実装してみます。

 前回はIDをキーにしたハッシュの中に配列を入れ込みました。当然配列変数なので配列の要素にアクセスするには何番目の値が欲しいのかを数字で指定しなければなりません。しかし今回は数字ではなく項目名でアクセスしたい。項目名ということは特定のキーワードです。特定のキーでデータを呼び出すということはご存知ハッシュ変数の出番となります。

#!/usr/bin/perl
use utf8; #-ソースがUTF8だという宣言
use Encode;
binmode STDOUT, ":utf8"; #-画面に出力したい文字コード
binmode STDERR, ":utf8"; #-エラー出力に使いたい文字コード
binmode STDIN, ":utf8"; #-標準入力から入ってくる文字コード

#-読み込むデータの項目名を定義しておく。
#-splitしてもいいけど私は地道に書くのが好き
#-ID,名前,年齢,誕生日(月),誕生日(日)
$Koumoku[0] = 'ID';
$Koumoku[1] = '名前';
$Koumoku[2] = '年齢';
$Koumoku[3] = '月';
$Koumoku[4] = '日';

while() {
chomp($_);
my %BODY; #-常に新しい領域を生み出す「my」がポイント
@LINE = split(",",$_);
#-定義した項目名をキーにして分解したフィールドをハッシュに入れる
for ($i=0;$i<@LINE;$i++) {
$BODY{$Koumoku[$i]} = $LINE[$i];
}
$Menber{$BODY{'ID'}} = \%BODY;#-配列のリファレンスを入れる
}

for $key (sort mySort keys %Menber) {
print $Menber{$key}{'ID'} . ':' . $Menber{$key}{'名前'} .'=';
print $Menber{$key}{'月'}.'月'.$Menber{$key}{'日'} .'日生 ' . $Menber{$key}{'年齢'} ."歳\n";
}

sub mySort() {
$Menber{$a}{'年齢'} <=> $Menber{$b}{'年齢'};
}

exit;

__DATA__
00,A君,13,12,3
01,B君,7,11,7
02,C君,8,4,1
03,D君,3,5,5


結果:
03:D君=5月5日生 3歳
01:B君=11月7日生 7歳
02:C君=4月1日生 8歳
00:A君=12月3日生 13歳

 前回のソースでは数字で配列の要素番号を指定していましたが、今回はハッシュ変数に項目名をキーにして入れたので「年齢」や「名前」等の項目名でデータを呼び出しています。ソートのルーチンでも「年齢」という項目名があるおかげで年齢でソートしているということがよくわかります。

 自分で項目名を定義してデータを一つの塊として生み出す。今回読み込んでいる名簿の中には「ID,名前,年齢,誕生日(月),誕生日(日)」という5つの値が存在しているのでソースの中で項目名を事前に準備しています。これから処理しようとしているデータが、

・どのような値を保持しているのかを確認する
・保持している値を格納する受け皿の準備をする

 受け皿の準備と言っても項目名を並べただけですが「この順番でデータが並んでますよ」という簡単な設計図といえます。ソースでは22行目にあるforループが準備した設計図にそってデータを格納している部分です。

 項目名で解りやすくデータをアクセスするには事前に設計図の準備が必要になります。今回は項目名の順番だけを定義する簡単な設計図使いました。次回はこの設計図をもうちょっと使いこなす、そんなソースをご紹介しようと思います。
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

プロフィール

ひらくん Author:ひらくん
どもども、ひらんくんどす。
日々まったり過ごしております。
仕事はDTP関連のスプリクト&アプリケーション開発。
Follow happyscript on Twitter

ブログ内検索



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。