如何在Tcl脚本中访问分配给变量的数据?

时间:2015-03-18 09:02:20

标签: variables tcl

我对Tcl很新,并且一直在编写片段以改善我们工作中流程的自动化。我想将变量的值与其先前的值进行比较,以便代码知道它的新流程。问题是:如何存储变量的旧值?或者更准确地说,我们如何存储在前一个流程中分配的变量的值?(甚至可能吗?)

以下是我们的工作流程的样子

开始编译

A)启动phase1并运行flow.tcl脚本两次

B)启动阶段2并运行flow.tcl脚本两次

...

结束编译

在此示例中,每次在不同阶段运行变量时,都会为变量分配一个新值。但由于我无法存储变量的值来进行比较,我坚持尝试不同的选项但是徒劳无功。这可能是完全不可能的,但据我所知,Tcl几乎可以处理所有事情。

非常感谢任何帮助

提前致谢

Hemanth

编辑:找到简单的解决方案。将数据写入文本文件并再次读回。感谢

1 个答案:

答案 0 :(得分:0)

您可以将变量保存在数组中并将变量加载回Tcl。命令“array get”序列化数据,“数组集”将其放回数组中。

flow.tcl

#!/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.

flow.dat

% cat flow.dat
count 1 last_timestamp 1427142892