CGI-BBS > CGI > Perl > メインデータ以外の外部データを読込んでリストを表示したい


カレッヂ
カレッヂ


質問者 もぐもぐ  投稿日 2004/7/26(月) 18:47:22
続けての質問でスイマセン(汗)

簡易データベースを利用して、以下のようなリストがあると
します。

$file ="item.list";
----------------------------------
1,01,りんご,200,
2,01,ばなな,100,
3,02,きゅうり,10,
4,01,みかん,50,
5,02,なす,100,
----------------------------------

これを条件を全てallで表示したとすると

コード 区分  品名      金額
---------------------------------------
1    01   りんご     200
2    01   ばなな     100
3    02   きゅうり     10
・
・
・
となると思うんですけど、この区分を表示させるために
別の外部データ

$Catefile ="Cate.list";
----------------------------------
01,果物
02,野菜
----------------------------------

を読み込ませて

コード 区分  品名      金額
---------------------------------------
1    果物   りんご     200
2    果物   ばなな     100
3    野菜   きゅうり     10
・
・
・

のようにしたいのです・・・。
自分なりに考えて

open(IN,"Cate.list") || &error("Open Error: だめだめ");
while (<IN>) {
	($code,$kubun) = split(/\,/);
	#たぶんここに何か書くのかなぁ・・;
}
close(IN);

までは思いついたんですけど、ここから先がどーにもこーにも
一人では解決が付きませんでした。

数が少ないときは別ファイルにする必要もないと思うのですが、
10〜20になると、別ファイルにしておくと後々便利かなぁと思い、
勉強を始めました。


なにかヒントだけでもいただけると嬉しいです。
宜しくお願いいたします。

プロバイダ参照:
サーバのOS:UNIXサーバ
パソコンのOS:WinNT系
エディタ:
FTPソフト:
サーバ移転:していない
改造:(未選択)
CGI習熟度:(未選択)

回答者 しあわせのツボ  [削除]  投稿日 2004/7/26(月) 20:01:03
私なら連想配列を使います(区分記号が必ず数字なら普通の配列の方がいいかもしれませんが)。
何か書くのかなーの所に
$cat_name{$code}=$kubun;
のようにしておき($FORM{コントロール名}=$value; はよく見ますよね)、
表示の際に区分記号のかわりに$cat_name{区分記号}を出させれば。
質問者 もぐもぐ  [削除]  投稿日 2004/7/26(月) 21:12:19
 しあわせのツボさん、前回に引き続き本当にありがとうござ
います。m(._.)m

 試してみたところ、希望通りに表現されました。感激です。
 更に追加で申し訳ないのですか、このデータをセレクトボッ
クスに埋め込む、といった方法はあるのでしょうか?
 色々なソースを見て回って勉強しているのですが・・。

print"<select name=mogumogu>\n";
foreach(0 .. $#mog) {
 if($mogg eq "$mog[$_]"){
 print"<option value=\"$mog[$_]\" selected>$mog[$_]\n";}
 else{
 print"<option value=\"$mog[$_]\">$mog[$_]\n";}
print"</select>\n";

 タブンこんなものを使うのだろう、までは分かったのですが
「#mog」部分の意味が分からなくて詰まってしまいました。

 現在はif〜elsif〜elseだけでずらずら書いてます。
この場合、セットする項目が10個もあると、10個分の記述が必
要になるのでソースがぜんぜん美しくないです。

 今回、せっかく連想配列の使い方を教えていただいたので、
うまく foreachと組み合わせる方法をご指導いただけませんで
しょうか?

 お手すきのときに回答頂けると嬉しいです。宜しくお願いい
たします。
回答者 しあわせのツボ  [削除]  投稿日 2004/7/26(月) 23:45:20
$#変数名 は、@変数名 の最大添字です。
@変数の要素数が14なら、(添字は0から始まるので)$#変数は13。

で、今回は@配列でなく%連想配列なので、eachを使います。
セレクトボックス云々がちょっと判断しかねるのですが、提示された例に沿うならば
while(($key,$val)=each %cat_name){print "<option value=$key>$val";}
で、とりあえず期待する結果は得られると思います。
質問者 もぐもぐ  [削除]  投稿日 2004/7/27(火) 11:50:30
 しあわせのツボさん!引き続き本当に本当にありがとう
ございます。m(._.)m 

 ご回答いただいた例を元にif文を加えたところ、望みど
おりの動作を行わせることに成功しました。

※セレクトボックス云々は、現在選択されているコードで
selectedを加えたかったのです。(汗)例えば「03」のデ
ータ表示中なら
 <select name=mogumogu>
  <option Value="01">ぱくぱく</option>
  <option Value="02">がつがつ</option>
  <option Value="03" selected>もぐもぐ</option>
 </select>
と表現させたかったのです・・・。

 日本語も勉強しなおさねば・・・(反省)

 これでごちゃごちゃしたソースにならず、スマートに
表現できそうです!

 本当にありがとうございました。

このページは終了したので返信(回答)は書きこめません
 


Web裏技