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

如何使用tcl更新文件中的tcl变量值?

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

    我有2个tcl文件,在数据中。tcl文件我保留标记位并进行测试。tcl文件基于标志值工作。我需要重置数据中的标志值。每次测试后tcl。你能帮我做同样的事吗。我尝试了以下代码,但不起作用

    data.tcl 文件包含标志变量:

    set mac 1 
    set xmac 0 
    set fea 0 
    

    test.tcl 具有将标志值设置为1或0的功能的脚本文件:

      set testcase mac 
      set fp [open "data.tcl" r+] 
    
      while { [gets $fp data] >= 0 } { 
        set var $data 
        if { [lindex $var 1] == $testcase } { 
           set fp1 [open "data.tcl" w+] 
           while { [gets $fp1 data1] >= 0 } { 
                set var1 $data1 
                if { [lindex $var1 1] == $testcase } { 
                set [lindex $var1 2] 0 
                } 
            close $fp1 
         } 
    
      close $fp 
       }   
     } 
    
    close $fp 
    

    我尝试了上述代码,但无法更新变量的值。请在这方面提供帮助。

    我正在编写自动化脚本,如果数据中的特定标志位设置为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 
    

    希望你们能满足我的要求。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jerry    7 年前

    使用打开文件 w+ 标志并不意味着如果您只是 set 少量价值(和 set [lindex $var1 2] 0 很可能不会做你认为它正在做的事情)。你必须 puts 新值。我建议 将修改后的内容重新命名为其他文件,然后重命名。可能是这样的:

    set testcase mac 
    set fp [open "data.tcl" r]
    set fp1 [open "data_temp.tcl" w]
    
    while {[gets $fp data] >= 0} { 
      if {[lindex $data 1] == $testcase} {
        # Change this line's 2nd element to 0
        lset data 2 0
      }
      # Write the line to the temp file
      puts $fp1 $data
    }
    
    close $fp
    close $fp1
    
    # Delete the old file
    file delete -force data.tcl
    # Rename the temp file to the old name
    file rename -force data_temp.tcl data.tcl
    

    在8.4之前的Tcl上(如果是这样的话,您应该在可能的情况下升级),您可以使用 set data [lreplace $data 2 2 0] 而不是 lset data 2 0

    推荐文章