我对Tcl很新,并且一直在编写片段以改善我们工作中流程的自动化。我想将变量的值与其先前的值进行比较,以便代码知道它的新流程。问题是:如何存储变量的旧值?或者更准确地说,我们如何存储在前一个流程中分配的变量的值?(甚至可能吗?)
以下是我们的工作流程的样子
开始编译
A)启动phase1并运行flow.tcl脚本两次
B)启动阶段2并运行flow.tcl脚本两次
...
结束编译
在此示例中,每次在不同阶段运行变量时,都会为变量分配一个新值。但由于我无法存储变量的值来进行比较,我坚持尝试不同的选项但是徒劳无功。这可能是完全不可能的,但据我所知,Tcl几乎可以处理所有事情。
非常感谢任何帮助
提前致谢
Hemanth
编辑:找到简单的解决方案。将数据写入文本文件并再次读回。感谢
答案 0 :(得分:0)
您可以将变量保存在数组中并将变量加载回Tcl。命令“array get”序列化数据,“数组集”将其放回数组中。
#!/usr/bin/tclsh
proc load_data {data_file array_name} {
upvar $array_name data
if {[file exists $data_file]} {
set fp [open $data_file r]
array set data [read $fp]
close $fp
}
}
proc save_data {data_file array_name} {
upvar $array_name data
set fp [open $data_file w]
puts $fp [array get data]
close $fp
}
set now [clock seconds]
# Set defaults. If you need new keys in your data file you can add them here.
set data(count) 0
set data(last_timestamp) $now
# Load existing data over default values. If the key doesn't exist the default will be used.
load_data "flow.dat" data
# Use the saved data to find elapsed time.
set elapsed [expr $now - $data(last_timestamp)]
set count $data(count)
# Save new data.
set data(last_timestamp) $now
set data(count) [incr count]
save_data "flow.dat" data
puts "It's been $elapsed seconds since last run. You have run this $count times."
% ./flow.tcl
It's been 0 seconds since last run. You have run this 1 times.
% cat flow.dat
count 1 last_timestamp 1427142892