Как обновить значение переменной 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

Другие вопросы по тегам