--- capa/capa51/GUITools/classl.tcl 1999/09/28 21:25:36 1.1 +++ capa/capa51/GUITools/classl.tcl 2000/02/22 18:10:27 1.2 @@ -72,8 +72,10 @@ proc createClasslEditor { classlFile } { button $actionFrame.sort -text "Sort" -command "classlSort $num" button $actionFrame.print -text "Print" -command "classlPrint $num" button $actionFrame.find -text "Find" -command "classlFind $num" + button $actionFrame.merge -text "Merge" -command "classlMerge $num" pack $actionFrame.add $actionFrame.edit $actionFrame.delete $actionFrame.section \ - $actionFrame.sort $actionFrame.print $actionFrame.find -side left + $actionFrame.sort $actionFrame.print $actionFrame.find $actionFrame.merge\ + -side left #window set leftFrame [frame $windowFrame.left] @@ -738,9 +740,8 @@ proc classlDoFind { num type } { incr which } set max [$gClassl($num) index end] - for {set i 0} { $i < ($max-1)} {incr i} { + for {set i 0} { $i < ($max)} {incr i} { set current [expr ($i+$which)%$max] - puts -nonewline "$current:" set entry [$gClassl($num) get $current] switch $type { name { set tmp [string range [$gClassl($num) get $current] 24 53] } @@ -751,9 +752,52 @@ proc classlDoFind { num type } { $gClassl($num) selection clear 0 end $gClassl($num) selection set $current $gClassl($num) see $current - puts " " return } } displayMessage "Not Found" +} + +########################################################### +# classlMerge +########################################################### +########################################################### +########################################################### +proc classlMerge { num } { + global gClassl + + set filename [tk_getOpenFile -title "Select a File to merge in"] + + if { $filename == "" } { return } + set fileId [open $filename "r"] + set maxlines [lindex [exec wc -l $filename] 0] + set linenum 0 + set newentries 0 + displayStatus "Merging $filename" both $num + set aline [gets $fileId] + while {![eof $fileId]} { + incr linenum + set found 0 + set stunum [string range $aline 14 22] + set max [$gClassl($num) index end] + for {set i 0} { $i < ($max)} {incr i} { + set tmp [string range [$gClassl($num) get $i] 14 22] + if { [regexp -nocase $stunum $tmp] } { + set found 1 + break + } + } + if { !$found } { + incr newentries + $gClassl($num) insert end $aline + } + updateStatusBar [expr $linenum/double($maxlines)] $num + set aline [gets $fileId] + } + removeStatus $num + if { $newentries != 0 } { + $gClassl($num) see $max + $gClassl($num) selection set $max + } + displayMessage "Added $newentries students." } \ No newline at end of file