- 締切済み
クイズCGI
10個の選択肢があるクイズを作っています。 プログラムは $問題番号=ユーザーの回答番号 という形でPOSTデータを取得します。 それで、現在1つ1つ if ($問題番号 == 正答番号) { 正解時の処理 } という文で処理を書いているのですが、問題が400近くあり、頻繁に問題を変更するので できればクイズの答えが次の形式で収録されている「test.csv」を使ってforeachあたりで 繰り返しを使いたいのですが…うまく動かすことができません。 問題番号,問題,正答番号 知恵を拝借願えないでしょうか。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- hanabutako
- ベストアンサー率54% (492/895)
こんなイメージであってますか? 標準入力から、「問題番号=回答番号」を受け取ると、test.csvを参照してcorrect!やwrong!を返すプログラムを書いてみました。 なお、test.csvの例は次のようなものを考えています。 1,test1,1 2,test2,4 3,test3,2 実行例) 1=1 correct! 2=1 wrong! 2=4 correct! 3=1 wrong! ^C use strict; sub is_correct { my ($q_num, $ans) = @_; my ($test_line, $file); open $file, "test.csv"; my @test = <$file>; close $file; foreach $test_line (@test) { $test_line =~ s/[\r\n]//; my @test_array = split(/,/,$test_line); if ($test_array[0] == $q_num && $test_array[2] == $ans) { return 1; } } return 0; } while (<STDIN>) { my @form_answer = split(/=/,$_); if (is_correct($form_answer[0], $form_answer[1])) { print "correct!\n"; } else { print "wrong!\n"; } }