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

1.1       albertel    1: proc parseScorerOutputLine { aline studentVar } {
                      2:     upvar $studentVar student
                      3:     set student(stunum) [lindex $aline 0]
                      4:     set aline [string range $aline 40 end]
                      5:     set length  [llength [split [lrange $aline 3 end] ,] ]
                      6:     set student(response) [lrange [split [lrange $aline 3 end] ,] 0 [expr {$length-2}]]
                      7:     set student(question) [lindex [lindex [split $aline ,] end] 0]
                      8: #    parray student
                      9: }
                     10: 
                     11: proc getQuestions { num pid set questnum questionVar } {
                     12:     upvar $questionVar question
                     13:     global gCapaConfig
                     14:     catch {unset question}
                     15:     set result [exec $gCapaConfig($num.answers_command) $pid {} 1 $set]
                     16:     set capture [set i 0]
                     17:     puts "$questnum:$i"
                     18:     foreach line [split $result "\n"] {
                     19: 	switch [lindex [split $line :] 0] {
                     20: 	    BQES {
                     21: 		incr i
                     22: 		if { [lsearch $questnum $i] != -1 } { set capture 1 }
                     23: 	    }
                     24: 	    EQES { set capture 0 }
                     25: 	    ANS {
                     26: 		if { [lsearch $questnum $i] != -1 } { 
                     27: 		    set question($i.ans) [split [lindex [split $line :] 1] {} ]
                     28: 		}
                     29: 	    }
                     30: 	    default { if { $capture } { lappend question($i.text) $line } }
                     31: 	}
                     32:     }
                     33:     foreach quest $questnum {
                     34: 	foreach line $question($quest.text) {
                     35: 	    if { [regexp {^ *([A-Z])\)(.*)} $line temp letter rest] } {
                     36: 		set question($quest.$letter) $rest
                     37: 		if { [lsearch $question($quest.ans) $letter] != -1} {
                     38: 		    set question($quest.correct.$letter) 1
                     39: 		} else {
                     40: 		    set question($quest.correct.$letter) 0
                     41: 		}
                     42: 	    }
                     43: 	}
                     44:     }
                     45:     parray question
                     46: }
                     47: 
                     48: #FIXME not parsing all student responses?
                     49: proc getStudentResponses { responses which questionVar responseArVar } {
                     50:     upvar $questionVar question $responseArVar responseAr
                     51:     set i 0
                     52:     foreach response [split $responses {}] {
                     53: 	if { $response == "" || $response == " "} { continue } 
                     54: 	incr i
                     55: 	if { [catch {incr responseAr($which.$question($which.$response))}] } {
                     56: 	    if {[catch {set responseAr($which.$question($which.$response)) 1}]} {
                     57:                 set responseAr($which.Illegal\ Bubble) 1
                     58:             }
                     59: 	}
                     60:     }
                     61:     puts $i
                     62: }
                     63: 
                     64: set fileId [open "records/scorer.output.1" r]
                     65: set setId 1
                     66: set questionNum "1"
                     67: source /nfs/capa1/capadvt/CAPA_SRC/5.0/GUITools/common.tcl
                     68: set aline [gets $fileId]
                     69: set aline [gets $fileId]
                     70: parseCapaConfig 1 .
                     71: set k 0
                     72: while { ! [eof $fileId] } {
                     73:     parseScorerOutputLine $aline student
                     74:     getQuestions 1 $student(question) $setId $questionNum question
                     75:     foreach which $questionNum {
                     76: 	getStudentResponses [lindex $student(response) [expr $which-1]] $which question \
                     77: 	    responses
                     78:     }
                     79:     foreach which $questionNum {
                     80: 	foreach elem [array names responses "$which.*"] {
                     81: 	    puts -nonewline "$responses($elem) "
                     82: 	}
                     83:     }
                     84:    incr k
                     85:     if { $k%20 == 0 } { parray responses }
                     86:     puts ""
                     87:     set aline [gets $fileId]
                     88: }
                     89: parray responses

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