File:  [LON-CAPA] / loncom / debugging_tools / parse_scantron.pl
Revision 1.1: download - view: text, annotated - select for diffs
Sat Apr 24 08:36:03 2004 UTC (20 years ago) by albertel
Branches: MAIN
CVS tags: version_2_9_X, version_2_9_99_0, version_2_9_1, version_2_9_0, version_2_8_X, version_2_8_99_1, version_2_8_99_0, version_2_8_2, version_2_8_1, version_2_8_0, version_2_7_X, version_2_7_99_1, version_2_7_99_0, version_2_7_1, version_2_7_0, version_2_6_X, version_2_6_99_1, version_2_6_99_0, version_2_6_3, version_2_6_2, version_2_6_1, version_2_6_0, version_2_5_X, version_2_5_99_1, version_2_5_99_0, version_2_5_2, version_2_5_1, version_2_5_0, version_2_4_X, version_2_4_99_0, version_2_4_2, version_2_4_1, version_2_4_0, version_2_3_X, version_2_3_99_0, version_2_3_2, version_2_3_1, version_2_3_0, version_2_2_X, version_2_2_99_1, version_2_2_99_0, version_2_2_2, version_2_2_1, version_2_2_0, version_2_1_X, version_2_1_99_3, version_2_1_99_2, version_2_1_99_1, version_2_1_99_0, version_2_1_3, version_2_1_2, version_2_1_1, version_2_1_0, version_2_12_X, version_2_11_X, version_2_11_4_uiuc, version_2_11_4_msu, version_2_11_4, version_2_11_3_uiuc, version_2_11_3_msu, version_2_11_3, version_2_11_2_uiuc, version_2_11_2_msu, version_2_11_2_educog, version_2_11_2, version_2_11_1, version_2_11_0_RC3, version_2_11_0_RC2, version_2_11_0_RC1, version_2_11_0, version_2_10_X, version_2_10_1, version_2_10_0_RC2, version_2_10_0_RC1, version_2_10_0, version_2_0_X, version_2_0_99_1, version_2_0_2, version_2_0_1, version_2_0_0, version_1_99_3, version_1_99_2, version_1_99_1_tmcc, version_1_99_1, version_1_99_0_tmcc, version_1_99_0, version_1_3_X, version_1_3_3, version_1_3_2, version_1_3_1, version_1_3_0, version_1_2_X, version_1_2_99_1, version_1_2_99_0, version_1_2_1, version_1_2_0, version_1_1_99_5, version_1_1_99_4, version_1_1_99_3, version_1_1_99_2, version_1_1_99_1, version_1_1_99_0, loncapaMITrelate_1, language_hyphenation_merge, language_hyphenation, bz6209-base, bz6209, bz5969, bz2851, PRINT_INCOMPLETE_base, PRINT_INCOMPLETE, HEAD, GCI_3, GCI_2, GCI_1, BZ5971-printing-apage, BZ5434-fox, BZ4492-merge, BZ4492-feature_horizontal_radioresponse, BZ4492-feature_Support_horizontal_radioresponse, BZ4492-Support_horizontal_radioresponse
- makes figuring out what is in a scantron file possible

    1: use strict;
    2: use IO::File;
    3: 
    4: sub get_scantron_config {
    5:     my ($which) = @_;
    6:     my $fh=IO::File->new('scantronformat.tab');
    7:     my %config;
    8:     #FIXME probably should move to XML it has already gotten a bit much now
    9:     foreach my $line (<$fh>) {
   10: 	my ($name,$descrip)=split(/:/,$line);
   11: 	print ($name ."\n".$which."\n");
   12: 	if ($name ne $which ) { next; }
   13: 	chomp($line);
   14: 	my @config=split(/:/,$line);
   15: 	$config{'name'}=$config[0];
   16: 	$config{'description'}=$config[1];
   17: 	$config{'CODElocation'}=$config[2];
   18: 	$config{'CODEstart'}=$config[3];
   19: 	$config{'CODElength'}=$config[4];
   20: 	$config{'IDstart'}=$config[5];
   21: 	$config{'IDlength'}=$config[6];
   22: 	$config{'Qstart'}=$config[7];
   23: 	$config{'Qlength'}=$config[8];
   24: 	$config{'Qoff'}=$config[9];
   25: 	$config{'Qon'}=$config[10];
   26: 	$config{'PaperID'}=$config[11];
   27: 	$config{'PaperIDlength'}=$config[12];
   28: 	$config{'FirstName'}=$config[13];
   29: 	$config{'FirstNamelength'}=$config[14];
   30: 	$config{'LastName'}=$config[15];
   31: 	$config{'LastNamelength'}=$config[16];
   32: 	last;
   33:     }
   34:     return %config;
   35: }
   36: 
   37: sub scantron_parse_scanline {
   38:     my ($line,$whichline,$scantron_config)=@_;
   39:     my %record;
   40:     my $questions=substr($line,$$scantron_config{'Qstart'}-1);
   41:     my $data=substr($line,0,$$scantron_config{'Qstart'}-1);
   42:     if ($$scantron_config{'CODElocation'} ne 0) {
   43: 	if ($$scantron_config{'CODElocation'} < 0) {
   44: 	    $record{'scantron.CODE'}=substr($data,$$scantron_config{'CODEstart'}-1,
   45: 					    $$scantron_config{'CODElength'});
   46: 	} else {
   47: 	    #FIXME interpret first N questions
   48: 	}
   49:     }
   50:     $record{'scantron.ID'}=substr($data,$$scantron_config{'IDstart'}-1,
   51: 				  $$scantron_config{'IDlength'});
   52:     $record{'scantron.PaperID'}=
   53: 	substr($data,$$scantron_config{'PaperID'}-1,
   54: 	       $$scantron_config{'PaperIDlength'});
   55:     $record{'scantron.FirstName'}=
   56: 	substr($data,$$scantron_config{'FirstName'}-1,
   57: 	       $$scantron_config{'FirstNamelength'});
   58:     $record{'scantron.LastName'}=
   59: 	substr($data,$$scantron_config{'LastName'}-1,
   60: 	       $$scantron_config{'LastNamelength'});
   61:     my @alphabet=('A'..'Z');
   62:     my $questnum=0;
   63:     while ($questions) {
   64: 	$questnum++;
   65: 	my $currentquest=substr($questions,0,$$scantron_config{'Qlength'});
   66: 	substr($questions,0,$$scantron_config{'Qlength'})='';
   67: 	if (length($currentquest) < $$scantron_config{'Qlength'}) { next; }
   68: 	my @array=split($$scantron_config{'Qon'},$currentquest,-1);
   69: 	if (length($array[0]) eq $$scantron_config{'Qlength'}) {
   70: 	    $record{"scantron.$questnum.answer"}='';
   71: 	} else {
   72: 	    $record{"scantron.$questnum.answer"}=$alphabet[length($array[0])];
   73: 	}
   74:  	if (scalar(@array) gt 2) {
   75:  	    push(@{$record{'scantron.doubleerror'}},$questnum);
   76:  	    my @ans=@array;
   77:  	    my $i=length($ans[0]);shift(@ans);
   78: 	    while ($#ans) {
   79:  		$i+=length($ans[0])+1;
   80:  		$record{"scantron.$questnum.answer"}.=$alphabet[$i];
   81:  		shift(@ans);
   82:  	    }
   83:  	}
   84:     }
   85:     $record{'scantron.maxquest'}=$questnum;
   86:     return \%record;
   87: }
   88: 
   89: sub print_record {
   90:     my ($scan_record)=@_;
   91:     print "Name: ".$scan_record->{'scantron.LastName'};
   92:     print "  ID: ".$scan_record->{'scantron.ID'};
   93:     print "  Paper ID: ".$scan_record->{'scantron.PaperID'};
   94:     print "\n";
   95:     for (my $i=1;$i<100;$i++) {
   96: 	if (!exists($scan_record->{"scantron.$i.answer"})) {
   97: 	    print "\n";
   98: 	    return;
   99: 	}
  100: 	if ($scan_record->{"scantron.$i.answer"} eq '') {
  101: 	    print " ";
  102: 	} else {
  103: 	    print $scan_record->{"scantron.$i.answer"};
  104: 	}
  105:     }
  106: }
  107: 
  108: open(FILE,'scantron.data');
  109: my %scantron_config=&get_scantron_config('msunocode');
  110: print(join(':',%scantron_config)."\n");
  111: my $i=0;
  112: while (my $line=<FILE>) {
  113:     my $scan_record=&scantron_parse_scanline($line,$i,\%scantron_config);
  114:     $i++;
  115:     print_record($scan_record);
  116: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>