Как обновить значение переменной tcl в файле, используя 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
Я пробовал приведенный выше код, но я не могу обновить значение переменной. Пожалуйста, помогите в этом.
Я пишу сценарий автоматизации, где тест запускается, если бит установленного флага установлен в единицу в файле data.tcl. После выполнения первой задачи мне нужно сбросить значение флага MAC на 0, а мне нужно установить файл флага xmac 1 и оставшиеся флаги на 0.
перед запуском значений флага тестового скрипта в data.tcl
set mac 1
set xmac 0
set fea 0
set fea1 0
после 1-го запуска: ожидаемое содержимое файла data.tcl:
set mac 0
set xmac 1
set fea 0
set fea1 0
после 2-го запуска: ожидаемое содержимое файла 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
Надеюсь, вы, ребята, получили мое требование.
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
На Tcl до 8.4 (если это так, вы должны обновить, если это возможно), вы можете использовать set data [lreplace $data 2 2 0]
вместо lset data 2 0