paulwhelan
asked on
guess words
say i have a text file "answers.txt" like this:
1 - test
3 - file
5 - now
10 - the
i would like a script that will load up a text file "story.txt" a do this:
replace all words in the relevant positions with a drop down menu containing the words in answers.txt
for example
if story.txt is:
this is a test file that i will test out now.
then when i run my script it get
[test/file/now/the] is [test/file/now/the] test [test/file/now/the] that i will test
[test/file/now/the] now.
note words 1 3 5 and 10 have been replaced with a drop down menu with all the words in answers.txt
then at the bottom of this script there is a submit button and when users hit submit they are told how many they got correct/ incorrect
thanks
1 - test
3 - file
5 - now
10 - the
i would like a script that will load up a text file "story.txt" a do this:
replace all words in the relevant positions with a drop down menu containing the words in answers.txt
for example
if story.txt is:
this is a test file that i will test out now.
then when i run my script it get
[test/file/now/the] is [test/file/now/the] test [test/file/now/the] that i will test
[test/file/now/the] now.
note words 1 3 5 and 10 have been replaced with a drop down menu with all the words in answers.txt
then at the bottom of this script there is a submit button and when users hit submit they are told how many they got correct/ incorrect
thanks
ASKER
th eexample i gave was just hypothetical
id like it to open a file and for it to work on any file......
thanks for the help though
id like it to open a file and for it to work on any file......
thanks for the help though
This is very rough...just to give you an idea!
#!/usr/local/bin/perl5
use CGI qw(:standard);
&parse_story;
&parse_ans;
for ($i=0; $i<scalar(@num_arry); $i++){
$data[$num_arry[$i]]= "popupmenu";
}
$query= new CGI;
$method= "text.cgi"; #name of your program
$action= "POST";
$encoding= "application/x-www-form-ur lencoded";
print header(), start_html("TITLE");
print $query->startform($method, $action,$e ncoding);
for ($i=0; $i<scalar(@data); $i++){
if ($data[$i] eq "popupmenu"){
print $query->popup_menu(-name=> 'menu_name ',
-values=> [@word_arry],
-default=> '?????');
}
else{
print " $data[$i]";
}
}
print $query->submit(-name=>'Sub mit');
print $query->endform;
print end_html;
sub parse_story{
open STORY, "story.txt";
$line= "";
while (<STORY>){
chomp; #remove carriage
$line= "$line $_"; # Concatenate the lines
}
@data= split /\s+/, $line;
print @data;
close STORY;
}
sub parse_ans{
open ANSWERS, "answers.txt";
$i=0;
while (<ANSWERS>){
chomp; #remove carriage
($num, $word)= split /\s-\s/, $_, 2; # Get the number and word
$num_arry[$i]= $num;
$word_arry[$i]= $word;
$i++;
}
close ANSWERS;
}
#!/usr/local/bin/perl5
use CGI qw(:standard);
&parse_story;
&parse_ans;
for ($i=0; $i<scalar(@num_arry); $i++){
$data[$num_arry[$i]]= "popupmenu";
}
$query= new CGI;
$method= "text.cgi"; #name of your program
$action= "POST";
$encoding= "application/x-www-form-ur
print header(), start_html("TITLE");
print $query->startform($method,
for ($i=0; $i<scalar(@data); $i++){
if ($data[$i] eq "popupmenu"){
print $query->popup_menu(-name=>
-values=> [@word_arry],
-default=> '?????');
}
else{
print " $data[$i]";
}
}
print $query->submit(-name=>'Sub
print $query->endform;
print end_html;
sub parse_story{
open STORY, "story.txt";
$line= "";
while (<STORY>){
chomp; #remove carriage
$line= "$line $_"; # Concatenate the lines
}
@data= split /\s+/, $line;
print @data;
close STORY;
}
sub parse_ans{
open ANSWERS, "answers.txt";
$i=0;
while (<ANSWERS>){
chomp; #remove carriage
($num, $word)= split /\s-\s/, $_, 2; # Get the number and word
$num_arry[$i]= $num;
$word_arry[$i]= $word;
$i++;
}
close ANSWERS;
}
funksoul changed their proposed answer to a comment
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
It uses two cgi scripts----
(I'm sure one of the real pro's has a much more elegant answer)
**************************
#!/usr/bin/perl
##########################
# PROGRAM answertest.pl
use CGI qw/escape unescape/;
%answers = ( #can construct this list by reading in text file
# or use DBI and a database etc
1 => "test",
3 => "file",
5 => "now",
10=> "the"
);
@answerkey = keys(%answers);#make an array for sorting
@sortedans = sort { $a <=> $b } @answerkey;#keeps in order
$answer_Sel = "";#make select options for drop down box
foreach $i (@answerkey) {
$answer_Sel .= "<OPTION Value = $i>$answers{$i}";
}
#could be read in from a text file
$story = "this is a test file that i will test out now.";
#make an array of the story split on spaces
@story = split(/ /, $story);
#make an array of positions to put form elements
@position = ('1','3','5','10');
foreach $i(@position){
splice(@story,$i,1,("<sele
}
$query = new CGI;
#send MIME and HTML headers
print $query->header("-nph=>1");
print $query->start_html(-title => 'Test answers!');
print <<HTML;
<FORM NAME="whatever" ACTION=/cgi-bin/whateveran
HTML
print "@story";
print <<HTML;
<input TYPE="submit" VALUE="How many correct?">
</FORM>
HTML
print $query->end_html;
**************************
#!/usr/bin/perl
##########################
# PROGRAM whateveranswer.pl
use CGI qw/escape unescape/;
$query = new CGI;
@question=$query->param("Q
$correct = "0";
#make an array of correct answers
@answerkey = ("3", "5","10","1");
foreach $i(@question){
if ($i = $answerkey[$i]){
$correct++
}
}
$query = new CGI;
#send MIME and HTML headers
print $query->header("-nph=>1");
print $query->start_html(-title => 'Test correct!');
print <<HTML;
You got $correct correct!
HTML
print $query->end_html;