CGI-BBS > 基礎 > その他 > @配列中のデーターから任意の1つを選択したい。


(株)友林堂
(株)友林堂


質問者 うさぎや  投稿日 1/27(月) 17:35:31
データーファイル(CSV形式)を開き @tatoeba に代入した時に
この@tatoebaに10行のデーターがあって その中から 1つ(1行)
選択するためには どうすればいいか悩んでします。

いわゆる おみくじのような物なのですが さっぱり分からず
本を読んでいたら 上記の場合

$SENTAKU = $tatoeba [ (int) rand ($#tatoeba) ];

といった感じで良いようなのですが
エラーばかり出てしまいます。
考え方として
@tatoebaに
大吉,ラッキー,おめでとう
中吉,やったね,まずまずだ

が入っていて

上記1文で $sentaku に 大吉,ラッキー,おめでとう が
入って 後は これを 表示するパートに渡せばいいと

考えています

いったいどこがダメなのか???です

どなたか ご教授お願いいたします。




 

プロバイダ参照:q-car@q-car.com
サーバのOS:UNIXサーバ
パソコンのOS:Win95系
エディタ:パールエディタ
FTPソフト:FFFTP
サーバ移転:していない
改造:していない
CGI習熟度:expert

回答者 しあわせのツボ  [削除]  投稿日 1/27(月) 18:34:11
> $SENTAKU = $tatoeba [ (int) rand ($#tatoeba) ];
これは
$SENTAKU = $tatoeba[int(rand($#tatoeba))];
ですね。
質問者 うさぎや  [削除]  投稿日 1/27(月) 22:51:53
ありがとうございます。
エラーは回避できましたが 同じ物ばかりでます。
たぶん初期化の問題かと思うのですが

今回のCGIでは たくさんの行のCSVデーターから
一定条件にあった行を 抽出し @配列に格納しています。

さらにその中から 1個だけをランダムに選び出し
表示させようと思っています。

@配列への格納まではきっちり出来ています。

CGIの中身としては

########### ファイル取得 ###########

if(!open(A,$datafile)){
	print "データファイルを開けません。<hr size=1>";
	print "ファイルが存在なし<hr size=1>" if ! -e $datafile;
	print "初期設定の問題あり<hr size=1>" if ! -r $datafile;
	exit;
}
@list=<A>;
close(A);

################# 条件抽出 リスト23番目##############

foreach $g(@list){
@y=split(/\,/,$g);
if($y[23] eq "$kigou"){push(@tyusyutu,$g);}else{next;}
}

################## @tyusyutuの中から1つ選択 ################

$line = $tyusyutu[int(rand($#tyusyutu))];


以下 表示部へと$lineを渡すようにしています

初期化が必要な場合 どこに srand関数を どういった構文で
入れればよいでしょうか すいませんが よろしくお願いいたします

基本的に間違っている部分がありましたら ご指摘下さい

よろしくお願いいたします
回答者 いのちゃん  [削除]  投稿日 1/28(火) 04:11:35
>一定条件にあった行を 抽出し @配列に格納しています。

>さらにその中から 1個だけをランダムに選び出し
>表示させようと思っています。


http://www.kcb-net.ne.jp/ki-net/webaccess/
本日の運勢
“おみくじを引く”を設定しておりますが、ランダムに抽出が出来ます。
こんな感じでしょうか? 一度運勢を占って見て下さい。なお、表示(V)→
ソース(C)でスクリプトを見てご参考になれば幸いです。


それとランダムで表示するものの2つ目として以下のurlの上の部分にもrandomの
記述がありますので“Msytery Link”と合わせて上下1組として見て下さいね。

http://www.kcb-net.ne.jp/ki-net/page2_4.html
ずーと下の端にスクロールすると“Mystery Link”と言うバーがありますので
これをクリックすると任意に抽出します。色々出て来ますのでやってみて下さい。
同じく表示(V)→ソース(C)でスクリプトを見て頂いてご参考になれば幸いです。


返信(回答)する

 


Web裏技