诀窍是想出一种不需要索引到文件中的映射方法。
proc setDataState {filename mapping} {
set f [open $filename]
set lines [split [read $f] "\n"]
close $f
set f [open $filename "w"]
foreach line $lines {
if {[regexp {^(\s*set\s+(\w+)\s+)\w+(.*)$} -> head key tail] && [dict exists $mapping $key]} {
set line $head[dict get $mapping $key]$tail
}
puts $f $line
}
close $f
}
因此,您可以通过受控方式更改文件,可能如下所示:
setDataState data.tcl {
mac 0
xmac 1
fea 0
fea1 0
}
好的,这样就可以进行编辑,但真正的关键是可以通过变量提供状态字典;这可以让你做更复杂的事情:
# This shuffles the â1â along
set statedict [dict create mac 0 xmac $mac fea $xmac fea1 $fea]
setDataState data.tcl $statedict
我认为实际上最好使用SQLite数据库来控制代码(并整理结果)。但这是一个更大的变化。