我正在编写自动化脚本,如果特定标志位在 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 包的一些命令,但我无法得到一些正确的结果。你能帮我用这段代码在每次运行后设置和重置标志吗?
诀窍是想出一种不需要文件索引的方法来进行映射。
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 数据库来控制您的代码(并整理结果)。但这是一个更大的变化。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句