0

我有 2 个 tcl 文件,在 data.tcl 文件中我保持标志位和 test.tcl 文件基于标志值工作。我需要在每次测试后重置 data.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 

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

我正在编写自动化脚本,如果 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 

第 3 次运行后:data.tcl 文件的预期内容:

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

希望你们能得到我的要求。

4

1 回答 1

1

使用标志打开文件w+并不意味着文件中的值会改变,如果你只是set几个值(并且set [lindex $var1 2] 0可能没有做你认为它正在做的事情)。您必须puts使用新值。我建议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

于 2018-01-10T09:23:37.667 回答