version 1.479, 2007/11/05 10:19:03
|
version 1.483, 2007/11/06 11:48:48
|
Line 42 use Apache::Constants qw(:common);
|
Line 42 use Apache::Constants qw(:common);
|
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::lonenc; |
use Apache::lonenc; |
use String::Similarity; |
use String::Similarity; |
use Data::Dumper; |
|
use LONCAPA; |
use LONCAPA; |
|
|
use POSIX qw(floor); |
use POSIX qw(floor); |
Line 5150 sub scantron_fixup_scanline {
|
Line 5149 sub scantron_fixup_scanline {
|
} |
} |
} elsif ($field eq 'answer') { |
} elsif ($field eq 'answer') { |
&scantron_get_maxbubble(); # Need the bubble counter info. |
&scantron_get_maxbubble(); # Need the bubble counter info. |
my $length=$scantron_config->{'Qlength'}; |
my $length =$scantron_config->{'Qlength'}; |
my $off=$scantron_config->{'Qoff'}; |
my $off=$scantron_config->{'Qoff'}; |
my $on=$scantron_config->{'Qon'}; |
my $on=$scantron_config->{'Qon'}; |
my $answer=${off}x$length; |
|
my $question_number = $args->{'question'} -1; |
my $question_number = $args->{'question'} -1; |
my $first_position = $first_bubble_line{$question_number}; |
my $first_position = $first_bubble_line{$question_number}; |
my $bubble_count = $bubble_lines_per_response{$question_number}; |
my $bubble_count = $bubble_lines_per_response{$question_number}; |
my $bubbles_per_line= $$scantron_config{'Qlength'}; |
my $bubbles_per_line= $$scantron_config{'Qlength'}; |
|
my $answer=${off}x($bubbles_per_line*$bubble_count); |
my $final_answer; |
my $final_answer; |
if ($$scantron_config{'Qon'} eq 'letter' || |
if ($$scantron_config{'Qon'} eq 'letter' || |
$$scantron_config{'Qon'} eq 'number') { |
$$scantron_config{'Qon'} eq 'number') { |
Line 5174 sub scantron_fixup_scanline {
|
Line 5173 sub scantron_fixup_scanline {
|
my @alphabet=('A'..'Z'); |
my @alphabet=('A'..'Z'); |
$answer=$alphabet[$bubble_number]; |
$answer=$alphabet[$bubble_number]; |
} elsif ($on eq 'number') { |
} elsif ($on eq 'number') { |
$answer=$args->$bubble_number+1; |
$answer= $bubble_number+1; |
if ($answer == 10) { $answer = '0'; } |
if ($answer == 10) { $answer = '0'; } |
} else { |
} else { |
substr($answer,$args->{'response'},1)=$on; |
substr($answer,$bubble_number+$bubble_line*$bubbles_per_line,1)=$on; |
|
$final_answer = $answer; |
} |
} |
my $before = Dumper($scan_data); |
|
&scan_data($scan_data, |
&scan_data($scan_data, |
"$whichline.no_bubble.".$args->{'question'},undef,'1'); |
"$whichline.no_bubble.".$args->{'question'},undef,'1'); |
my $after = Dumper($scan_data); |
|
for (my $l = 0; $l < $bubble_count; $l++) { |
# Positional notation already has the right final answer length.. |
if ($l eq $bubble_line) { |
|
$final_answer .= $answer; |
if (($on eq 'letter') || ($on eq 'number')) { |
} else { |
for (my $l = 0; $l < $bubble_count; $l++) { |
$final_answer .= ' '; |
if ($l eq $bubble_line) { |
|
$final_answer .= $answer; |
|
} else { |
|
$final_answer .= ' '; |
|
} |
} |
} |
} |
} |
} |
} |
Line 5195 sub scantron_fixup_scanline {
|
Line 5198 sub scantron_fixup_scanline {
|
#substr($line,$where-1,$length)=$answer; |
#substr($line,$where-1,$length)=$answer; |
substr($line, |
substr($line, |
$scantron_config->{'Qstart'}+$first_position-1, |
$scantron_config->{'Qstart'}+$first_position-1, |
$bubbles_per_line) = $final_answer; |
$bubbles_per_line*$length) = $final_answer; |
} |
} |
} |
} |
return $line; |
return $line; |
Line 5443 sub scantron_parse_scanline {
|
Line 5446 sub scantron_parse_scanline {
|
if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { |
if (!&scan_data($scan_data,"$whichline.no_bubble.$questnum")) { |
push(@{$record{"scantron.missingerror"}},$questnum); |
push(@{$record{"scantron.missingerror"}},$questnum); |
} |
} |
} elsif (scalar(@array) lt 2) { |
|
|
# If the bubble is not the last position, there will be |
|
# 2 elements. If it is the last position, there will be 1 element. |
|
|
|
} elsif (scalar(@array) le 2) { |
|
|
my $location = length($array[0]); |
my $location = length($array[0]); |
my $line_num = $location / $$scantron_config{'Qlength'}; |
my $line_num = int($location / $$scantron_config{'Qlength'}); |
my $bubble = $alphabet[$location % $$scantron_config{'Qlength'}]; |
my $bubble = $alphabet[$location % $$scantron_config{'Qlength'}]; |
|
|
|
|
for (my $ans = 0; $ans < $answers_needed; $ans++) { |
for (my $ans = 0; $ans < $answers_needed; $ans++) { |
if ($ans eq $line_num) { |
if ($ans eq $line_num) { |
Line 6520 ENDSCRIPT
|
Line 6528 ENDSCRIPT
|
foreach my $question (@{$arg}) { |
foreach my $question (@{$arg}) { |
my $selected = &get_response_bubbles($scan_record, $question); |
my $selected = &get_response_bubbles($scan_record, $question); |
my @select_array = split(/:/,$selected); |
my @select_array = split(/:/,$selected); |
&Apache::lonnet::logthis("Questnum: $question, bubbles: $selected scanline $i"); |
|
&scantron_bubble_selector($r,$scan_config,$question, |
&scantron_bubble_selector($r,$scan_config,$question, |
@select_array); |
@select_array); |
} |
} |
Line 6800 sub scantron_validate_doublebubble {
|
Line 6807 sub scantron_validate_doublebubble {
|
my ($scanlines,$scan_data)=&scantron_getfile(); |
my ($scanlines,$scan_data)=&scantron_getfile(); |
|
|
&scantron_get_maxbubble(); # parse needs the bubble line array. |
&scantron_get_maxbubble(); # parse needs the bubble line array. |
&Apache::lonnet::logthis("validate_double_bubble"); |
|
|
|
for (my $i=0;$i<=$scanlines->{'count'};$i++) { |
for (my $i=0;$i<=$scanlines->{'count'};$i++) { |
my $line=&scantron_get_line($scanlines,$scan_data,$i); |
my $line=&scantron_get_line($scanlines,$scan_data,$i); |
Line 6808 sub scantron_validate_doublebubble {
|
Line 6814 sub scantron_validate_doublebubble {
|
my $scan_record=&scantron_parse_scanline($line,$i,\%scantron_config, |
my $scan_record=&scantron_parse_scanline($line,$i,\%scantron_config, |
$scan_data); |
$scan_data); |
if (!defined($$scan_record{'scantron.doubleerror'})) { next; } |
if (!defined($$scan_record{'scantron.doubleerror'})) { next; } |
&Apache::lonnet::logthis("Double found for line $i : $line"); |
|
&scantron_get_correction($r,$i,$scan_record,\%scantron_config,$line, |
&scantron_get_correction($r,$i,$scan_record,\%scantron_config,$line, |
'doublebubble', |
'doublebubble', |
$$scan_record{'scantron.doubleerror'}); |
$$scan_record{'scantron.doubleerror'}); |