代码之家  ›  专栏  ›  技术社区  ›  Nagesh HS

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

  •  0
  • Nagesh HS  · 技术社区  · 8 年前

    我正在编写自动化脚本,如果数据中的特定标志位设置为1,则测试将在其中运行。tcl文件。 完成第一个任务后,我需要将MAC标志值重置为0,并需要将xmac标志文件1和其余标志设置为0。

    在数据中运行测试脚本标志值之前。tcl集团

    set mac 1 
    set xmac 0 
    set fea 0 
    set fea1 0 
    

    第一次运行后:预期的数据内容。tcl文件:

      set mac 0 
      set xmac 1 
      set fea 0 
      set fea1 0 
    

    第二次运行后:预期的数据内容。tcl文件:

      set mac 0 
      set xmac 0 
      set fea 1 
      set fea1 0 
    

    第三次运行后:预期的数据内容。tcl文件:

      set mac 0 
      set xmac 0 
      set fea 0 
      set fea1 1 
    
    
       fileutil::replaceInFile data.tcl 30 1 0 
    

    上面的命令将位置31处的值重置为0,但在我的情况下,每个标志都是不同长度的名称,因此我们不能使用位置指针来设置和重置标志 我使用fileutil包尝试了一些命令,但没有得到正确的结果。请您帮助我在每次运行后设置和重置标志。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Donal Fellows    8 年前

    诀窍是想出一种不需要索引到文件中的映射方法。

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

    推荐文章