プロが教えるわが家の防犯対策術!

この間ポケモン図鑑について質問させていただいた者です。(ID違いますけど^^;
http://oshiete1.goo.ne.jp/kotaeru.php3?q=1649007

変な質問をしてるかもしれませんm(_ _)m
@list内には
手持ち・・(略)<>あくしゅう<>
ほのお・こお・・<>あついしぼう<>
戦頭に出ると・・<>あめふらし<>

このように1つ目に説明文、2つ目に(特性の)名前が入っています。
それを、

foreach(@list){
($content,$name)=split(/<>/);
}

こんな感じでスカラー変数に代入してるのですが、
各ポケモンのデータを表示するページで説明文を表示するにはどうすればいいのでしょうか?
「$end_tokuse」というスカラー変数にあらかじめ各ポケモンの特性の名前は入っていて、それを上の処理と一致するか、しないかでこんな感じで
print <<EOM;
<table><tr><td>
EOM
ここに上の処理を
print <<EOM;
</td></tr></table>
EOM
持って来て表示させようかと思っていたのですが、表示するデータの量がほかにもたくさんありすぎていちいち切っていると
編集が大変面倒になるので、一致した説明文をスカラー変数に代入して
print <<EOM;
<table><tr><td>
$setume
</td></tr></table>
EOM
このようにしたいのですが、どうすればいいかわかりません。
一致した説明文をスカラー変数に代入して表示させるにはどうすればいいですか。

わかりにくいですがよろしくお願いします。

A 回答 (1件)

ちょっと何が聞きたいのか判断できません。


#以下の例のインデントは全角空白を使ってますので
#コピーする時は半角などに変換してください。
#あと、書いている処理に関してはテストしてないです(^^;

特性に対する説明文を表示したいという事なのですが

foreach(@list){
 ($content,$name)=split(/<>/);
 if( $end_tokuse eq $name ){
  print "$content\n";
  last;
 }
}

という感じで表示できますよね?

表示するデータの量がほかにもたくさんありすぎて
いちいち切っていると編集が大変面倒になるので

という事ですが、「表示するデータ量」というのは
何の量なのでしょうか?
特性の量?ポケモンの量?ポケモンが持っている特性の量?
「いちいち切っていると」というのは、split()の事でしょうか?
「編集が大変」というのは、書く場所が多いから?ですか?

一致した説明文をスカラー変数に代入して表示させるには
どうすればいいですか。

というのは

foreach(@list){
 ($content,$name)=split(/<>/);
 if( $end_tokuse eq $name ){
  $setume = $content;
  last;
 }
}

という事では無いのですか?

出来れば最終的にどのように表示したいのかの
例をあげていただけるとありがたいです。

例)
ピカチューの特性は雷です。
これを表示するのに

名前:ピカチュー
特性:雷
説明:ここに説明を書きたい

名前:思い浮かばない(複数特性がある場合)
特性:水
説明:水に対する説明
特性:火
説明:火に対する説明

特性が可変な為、それをどのように表示すればいいでしょうか?

という感じだとわかりやすいかも・・・


あと、質問の意図とは違うかもしれませんが、
複数の特性を表示する為に簡単な方法として

1.特性に対する説明文を抜き出す関数を作る
#表示部が簡易にできる。

sub GetComment(){
 local( $char ) = @_;
 foreach( @list ){
  ( $comment, $name ) = split( /<>/ );
  if( $char = $name ){
   return $comment;
  }
 }
 return "そのような特性はありません。";
}

$setume = &GetComment( $end_tokusei );

2.最初に連想配列に入れておく
#分割処理が1度でいいので、表示数が増えても
#処理時間が少なくて済む

foreach( @list ){
 ( $comment, $name ) = split( /<>/ );
 $Com{$name} = $comment;
}

print $Com{$tokusei1};
print $Com{$tokusei2};
    • good
    • 0
この回答へのお礼

ファイルに組み込んでやってみましたが、
500エラーになってしまいました。
でも質問の内容が良くわからないようなので、
普通に
print <<EOM;
<table><tr><td>
EOM
ここに表示処理
print <<EOM;
</td></tr></table>
EOM

を入れる方法でいきたいと思います。
ありがとうございましたm(_ _)m

お礼日時:2005/11/17 20:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!