我有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
第三次运行后:data.tcl文件的预期内容:
set mac 0
set xmac 0
set fea 0
set fea1 1
希望你们有我的要求。
答案 0 :(得分: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