![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
txt ファイル から ランダムに 1行読み込んで
それが フォームの入力文字と同じかを 判定し、
同じならば、次のファイルへ飛ぶ には、
どうしたらよいのでしょうか? お教えください。
------------------------------------------------------
mondai.txt に 問題を 1行に 1題ずつ
kotae.txt に 解答を 1行に ひとつずつ
書きました。
mondai.txt の 1行目の 解答が kotae.txt の 1行目
(2行目-10行目、同じ)としました。
001.cgi で 正解すれば 002.cgi を開く
不正解なら もう一度 001.cgi を実行。
問題は ランダムに 表示する。
まず、mondai.txt と kotae.txt を それぞれ 10行にして
やってみました。
------------------------------------------------------
すると、問題は ランダムに表示されました。
しかし、
#####################################################
if (param('answer') eq ("$ans")){
print "Location:$num2.cgi\n\n";
・・・
{
#####################################################
が、うまくいきません。
↓こうしてあります。どうしたら、よいでしょうか?
↓解答したことを file.txt に記録しよう、ともしています。
↓
################ はじめ ##############################
#!/usr/bin/perl -T
use strict;
use warnings;
use CGI qw(-debug :standard);
my
($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst) = localtime(time);
$year += 1900;
$mon = sprintf("%02d", $mon + 1);
$day = sprintf("%02d", $day);
$hour = sprintf("%02d", $hour);
$min = sprintf("%02d", $min);
$sec = sprintf("%02d", $sec);
my $num = ('1267');
my $num2 = $num + 1;
my $value = param('answer');
open(FILE, "../../mondai.txt");
my @data2 = <FILE>;
close(FILE);
open(FILE, "../../kotae.txt");
my @data3 = <FILE>;
close(FILE);
my $i = int(rand(10));
my $ans = $data3[$i];
if (param('answer') eq ("$ans")){
print "Location:$num2.cgi\n\n";
open(FILE, '<+file.txt') or die "$!";
my
@DATA = <FILE>;
close(FILE);
open(FILE, '>file.txt') or die "$!";
print FILE ("$num,$ans,$year年$mon月$day日 $hour時$min分$sec秒\n");
print FILE (@DATA);
close(FILE);
}
else {
print header(-charset => 'Shift_JIS');
print start_html("$num.cgi");
print ('<font face="century">');
print $data2[$i]; #####---問題表示
print br;
print startform(
-method => 'POST',
-action => "$num.cgi"
);
print blockquote(
textfield(
-name => 'answer',
-size => '70',
-id => "next",
-accesskey => '['
)
);
print <<END;
<script type="text/javascript" language="JavaScript">
document.getElementById('next').focus();
</script>
END
print submit(-value => 'Send ( ↑Alt+[ )');
print endform;
}
################ おわり ##############################
よろしく、お願いいたします。
No.3ベストアンサー
- 回答日時:
もう回答がいくらか出ているので細かいことは言いませんが、以下のことも確認してみてください。
ファイルから読み取ったデータには、各行の最後に「\n」(改行)が入っていたりします。
(フォームの回答「aaa」とファイル内の解答「aaa\n」はeqにはなりません)
if文のところをこんな風にいじってみてください
if (param('answer') eq $ans){
↓
if (param('answer')."\n" eq $ans){
もしくは
if (param('answer') eq chop($ans)){
改行コードが\nであること前提の話ですが以上です。
No.2
- 回答日時:
簡単にしかコードを読んでいないのですが、
どうも気になる点があったので回答します。
やりたい事は、別々のファイルに記述された問題と答えを、
ランダムで1問読み込んで解答の判定をしたいということですね。
まず、最初に実行した時に、
$i に乱数が入ります。そして、それを元に問題が出されます。
そして、答えを入力して送信していますね?
しかし、答え合わせをする為に、送信した時に、
また、$i に乱数が作られているので、
問題番号と解答番号が一致しておりません。
これでは、正しい答えを入力しても、
10回に1回しか正解になりません。
答えを送信する時に、一緒に問題番号を送信して、
答えは、その問題番号から引き出してくると良いでしょう。
No.1
- 回答日時:
if の判定が期待通りできてないということですか?
>if (param('answer') eq ("$ans")){
$ans のほうの末尾に改行がくっついてませんか?
それから、この場合の$ansをダブルクォートで括る必要はありません。
>print start_html("$num.cgi");
とか
>-action => "$num.cgi"
もそうですね。
この回答への補足
ご回答、まことに、ありがとうございます。
はい、
if の判定が期待通りできてないということです。
問題が question-01 のとき
解答を answer-01 と フォームに書いても
1276.cgi のままで、 1277.cgi へ飛びません。
----↑my $num = ('1267'); の時です。-----
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- Perl perlのflock関数でロックをかけたままopen関数で何度もファイルを開きなおすことはできますか 3 2023/05/01 22:25
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHP MySQLに画像を直接保存 2 2022/06/05 11:50
- その他(プログラミング・Web制作) Pythonを勉強しています。 5 2023/08/25 09:51
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- その他(プログラミング・Web制作) python 2 2022/12/23 09:06
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Perlで時間の計算
-
テキストファイルで提出とは?
-
積分計算の答えが合いません・・・
-
Perlで、「が」を、「...
-
アルファベットに付いて質問し...
-
ファイルをディレクトリ分配の...
-
#!/usr/bin/perlで書きだしたCG...
-
Perlのエラーについてご教授く...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
-
perlプログラミング 空白行削除
-
perlでリテラル値はメモリにど...
-
perlで2次元配列をサブルーチ...
-
perlについて
-
perlのrequireの動き方について...
-
perlの構文でカンマの意味が分...
-
perlについての質問
-
perlのプログラミング 部分入れ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
サーバーのテキストファイルを...
-
LuaJITで日本語出力
-
表示を一覧表形式にしたいので...
-
IIS の@INC ERRORについて教えて
-
索引を目次の該当ページへ入れ...
-
HTMLからCGIへデータを引き継ぎ
-
CGIの中で異なるContent-typeの...
-
jcode.pl 使い方
-
ブラウザ表示されません大変困...
-
CGIで、ボタンを押した時に違う...
-
perlがうごきません
-
標準入力からデータが読込めない
-
ランダムに1行読込み フォーム...
-
sjisでの文字化け?
-
サーバー(UNIX)上のフォルダ...
-
検索結果テーブルの背景色を変...
-
他のWWWサーバーからHTMLを得る
-
ひらがなチェック
-
次のcgiファイルを開くには? ...
-
ソケットの使い方が分からない
おすすめ情報