我正在编写自动化脚本,如果data.tcl文件中的特定标志位设置为1,则运行测试。 完成第一个任务后,我需要将MAC标志值重置为0,我需要将xmac标志文件1和剩余标志设置为0.
在data.tcl
中运行测试脚本标志值之前set mac 1
set xmac 0
set fea 0
set fea1 0
第一次运行后:data.tcl文件的预期内容:
set mac 0
set xmac 1
set fea 0
set fea1 0
第二次运行后:data.tcl文件的预期内容:
set mac 0
set xmac 0
set fea 1
set fea1 0
第三次运行后:data.tcl文件的预期内容:
set mac 0
set xmac 0
set fea 0
set fea1 1
fileutil::replaceInFile data.tcl 30 1 0
上面的命令将位置31的值重置为0,但在我的情况下,每个标志都是不同的长度名称,所以我们不能使用位置指针来设置和重置标志 我尝试使用fileutil包的一些命令,但我无法得到一些正确的结果。你可以帮我用这段代码在每次运行后设置和重置标志。
答案 0 :(得分:0)
诀窍是提出一种方法来完成不需要索引到文件中的映射。
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数据库来控制代码(并整理结果)。但这是一个更大的变化。