Annotation of capa/capa51/GUITools/analyzeScorer.tcl, revision 1.3

1.2       albertel    1: # early verision of a reverse mapping of a randomized multiple choice 
                      2: # question analyzer
                      3: #  Copyright (C) 1992-2000 Michigan State University
                      4: #
                      5: #  The CAPA system is free software; you can redistribute it and/or
1.3     ! albertel    6: #  modify it under the terms of the GNU General Public License as
1.2       albertel    7: #  published by the Free Software Foundation; either version 2 of the
                      8: #  License, or (at your option) any later version.
                      9: #
                     10: #  The CAPA system is distributed in the hope that it will be useful,
                     11: #  but WITHOUT ANY WARRANTY; without even the implied warranty of
                     12: #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
1.3     ! albertel   13: #  General Public License for more details.
1.2       albertel   14: #
1.3     ! albertel   15: #  You should have received a copy of the GNU General Public
1.2       albertel   16: #  License along with the CAPA system; see the file COPYING.  If not,
                     17: #  write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
                     18: #  Boston, MA 02111-1307, USA.
                     19: #
                     20: #  As a special exception, you have permission to link this program
                     21: #  with the TtH/TtM library and distribute executables, as long as you
                     22: #  follow the requirements of the GNU GPL in regard to all of the
                     23: #  software in the executable aside from TtH/TtM.
                     24: 
                     25: 
1.1       albertel   26: proc parseScorerOutputLine { aline studentVar } {
                     27:     upvar $studentVar student
                     28:     set student(stunum) [lindex $aline 0]
                     29:     set aline [string range $aline 40 end]
                     30:     set length  [llength [split [lrange $aline 3 end] ,] ]
                     31:     set student(response) [lrange [split [lrange $aline 3 end] ,] 0 [expr {$length-2}]]
                     32:     set student(question) [lindex [lindex [split $aline ,] end] 0]
                     33: #    parray student
                     34: }
                     35: 
                     36: proc getQuestions { num pid set questnum questionVar } {
                     37:     upvar $questionVar question
                     38:     global gCapaConfig
                     39:     catch {unset question}
                     40:     set result [exec $gCapaConfig($num.answers_command) $pid {} 1 $set]
                     41:     set capture [set i 0]
                     42:     puts "$questnum:$i"
                     43:     foreach line [split $result "\n"] {
                     44: 	switch [lindex [split $line :] 0] {
                     45: 	    BQES {
                     46: 		incr i
                     47: 		if { [lsearch $questnum $i] != -1 } { set capture 1 }
                     48: 	    }
                     49: 	    EQES { set capture 0 }
                     50: 	    ANS {
                     51: 		if { [lsearch $questnum $i] != -1 } { 
                     52: 		    set question($i.ans) [split [lindex [split $line :] 1] {} ]
                     53: 		}
                     54: 	    }
                     55: 	    default { if { $capture } { lappend question($i.text) $line } }
                     56: 	}
                     57:     }
                     58:     foreach quest $questnum {
                     59: 	foreach line $question($quest.text) {
                     60: 	    if { [regexp {^ *([A-Z])\)(.*)} $line temp letter rest] } {
                     61: 		set question($quest.$letter) $rest
                     62: 		if { [lsearch $question($quest.ans) $letter] != -1} {
                     63: 		    set question($quest.correct.$letter) 1
                     64: 		} else {
                     65: 		    set question($quest.correct.$letter) 0
                     66: 		}
                     67: 	    }
                     68: 	}
                     69:     }
                     70:     parray question
                     71: }
                     72: 
                     73: #FIXME not parsing all student responses?
                     74: proc getStudentResponses { responses which questionVar responseArVar } {
                     75:     upvar $questionVar question $responseArVar responseAr
                     76:     set i 0
                     77:     foreach response [split $responses {}] {
                     78: 	if { $response == "" || $response == " "} { continue } 
                     79: 	incr i
                     80: 	if { [catch {incr responseAr($which.$question($which.$response))}] } {
                     81: 	    if {[catch {set responseAr($which.$question($which.$response)) 1}]} {
                     82:                 set responseAr($which.Illegal\ Bubble) 1
                     83:             }
                     84: 	}
                     85:     }
                     86:     puts $i
                     87: }
                     88: 
                     89: set fileId [open "records/scorer.output.1" r]
                     90: set setId 1
                     91: set questionNum "1"
                     92: source /nfs/capa1/capadvt/CAPA_SRC/5.0/GUITools/common.tcl
                     93: set aline [gets $fileId]
                     94: set aline [gets $fileId]
                     95: parseCapaConfig 1 .
                     96: set k 0
                     97: while { ! [eof $fileId] } {
                     98:     parseScorerOutputLine $aline student
                     99:     getQuestions 1 $student(question) $setId $questionNum question
                    100:     foreach which $questionNum {
                    101: 	getStudentResponses [lindex $student(response) [expr $which-1]] $which question \
                    102: 	    responses
                    103:     }
                    104:     foreach which $questionNum {
                    105: 	foreach elem [array names responses "$which.*"] {
                    106: 	    puts -nonewline "$responses($elem) "
                    107: 	}
                    108:     }
                    109:    incr k
                    110:     if { $k%20 == 0 } { parray responses }
                    111:     puts ""
                    112:     set aline [gets $fileId]
                    113: }
                    114: parray responses

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