如何使用 tcl 更新文件中的 tcl 变量值?
how to update tcl variable value in file using tcl?
我有 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
我试过上面的代码,但我无法更新变量的值。请为此提供帮助。
我正在编写自动化脚本,其中测试 运行s 是否在 data.tcl 文件中将特定标志位设置为 1。
完成第一个任务后,我需要将 MAC 标志值重置为 0,我需要将 xmac 标志文件 1 和剩余标志设置为 0。
在 运行ning 测试脚本标志值之前 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
希望你们能满足我的要求。
使用 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
我有 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
我试过上面的代码,但我无法更新变量的值。请为此提供帮助。
我正在编写自动化脚本,其中测试 运行s 是否在 data.tcl 文件中将特定标志位设置为 1。 完成第一个任务后,我需要将 MAC 标志值重置为 0,我需要将 xmac 标志文件 1 和剩余标志设置为 0。
在 运行ning 测试脚本标志值之前 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
希望你们能满足我的要求。
使用 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