--- loncom/homework/grades.pm 2007/11/06 10:12:27 1.481 +++ loncom/homework/grades.pm 2007/11/06 11:21:21 1.482 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # The LON-CAPA Grading handler # -# $Id: grades.pm,v 1.481 2007/11/06 10:12:27 foxr Exp $ +# $Id: grades.pm,v 1.482 2007/11/06 11:21:21 foxr Exp $ # # Copyright Michigan State University Board of Trustees # @@ -5149,14 +5149,14 @@ sub scantron_fixup_scanline { } } elsif ($field eq 'answer') { &scantron_get_maxbubble(); # Need the bubble counter info. - my $length=$scantron_config->{'Qlength'}; + my $length =$scantron_config->{'Qlength'}; my $off=$scantron_config->{'Qoff'}; my $on=$scantron_config->{'Qon'}; - my $answer=${off}x$length; my $question_number = $args->{'question'} -1; my $first_position = $first_bubble_line{$question_number}; my $bubble_count = $bubble_lines_per_response{$question_number}; my $bubbles_per_line= $$scantron_config{'Qlength'}; + my $answer=${off}x($bubbles_per_line*$bubble_count); my $final_answer; if ($$scantron_config{'Qon'} eq 'letter' || $$scantron_config{'Qon'} eq 'number') { @@ -5173,18 +5173,24 @@ sub scantron_fixup_scanline { my @alphabet=('A'..'Z'); $answer=$alphabet[$bubble_number]; } elsif ($on eq 'number') { - $answer=$args->{$bubble_number+1}; + $answer= $bubble_number+1; if ($answer == 10) { $answer = '0'; } } else { - substr($answer,$args->{'response'},1)=$on; + substr($answer,$bubble_number+$bubble_line*$bubbles_per_line,1)=$on; + $final_answer = $answer; } &scan_data($scan_data, "$whichline.no_bubble.".$args->{'question'},undef,'1'); - for (my $l = 0; $l < $bubble_count; $l++) { - if ($l eq $bubble_line) { - $final_answer .= $answer; - } else { - $final_answer .= ' '; + + # Positional notation already has the right final answer length.. + + if (($on eq 'letter') || ($on eq 'number')) { + for (my $l = 0; $l < $bubble_count; $l++) { + if ($l eq $bubble_line) { + $final_answer .= $answer; + } else { + $final_answer .= ' '; + } } } } @@ -5192,7 +5198,7 @@ sub scantron_fixup_scanline { #substr($line,$where-1,$length)=$answer; substr($line, $scantron_config->{'Qstart'}+$first_position-1, - $bubbles_per_line) = $final_answer; + $bubbles_per_line*$length) = $final_answer; } } return $line; @@ -5440,7 +5446,11 @@ sub scantron_parse_scanline { if (!&scan_data($scan_data,"$whichline.no_bubble.$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 $line_num = $location / $$scantron_config{'Qlength'};