如何在每次运行后更新TCL文件中的标志位?

时间:2018-01-11 10:12:38

标签: automation tcl tk

我正在编写自动化脚本,如果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包的一些命令,但我无法得到一些正确的结果。你可以帮我用这段代码在每次运行后设置和重置标志。

1 个答案:

答案 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数据库来控制代码(并整理结果)。但这是一个更大的变化。