使用tcl从文件中获取变量的值

时间:2015-03-21 18:01:05

标签: file tcl ns2

set lambda 1

set lambdaR [open LamdaValue.tr r]
  set Reader [read $lambdaR]
  close $lambdaR

foreach {x} $Reader {
   set lambda $x
  }
set $lambda [expr {$lambda + 1.0}]
set LambdaW [open LamdaValue.tr w]
puts $LambdaW "$lambda"

我正在尝试使用这段代码从文件中读取lambda的值,修改它,然后再将其写入文件。我正在使用ns-2来处理tcl执行文件。 但是lambda的价值并没有改变...... 你能发现哪里出错了吗?

1 个答案:

答案 0 :(得分:1)

最好编写一个小程序来读取文件并返回其内容,而另一个程序则将值写回。

proc readfile {filename} {
    set f [open $filename]
    set data [read $f]
    close $f
    return $data
}
proc writefile {filename data} {
    set f [open $filename w]
    puts -nonewline $f $data
    close $f
}

然后,您可以大量简化其余代码:

set lambda 1
# The catch means we use the fallback if the file doesn't exist
catch {set lambda [readfile LamdaValue.tr]}

set lambda [expr {$lambda + 1.0}]

writefile LamdaValue.tr $lambda

你遇到的另一个问题是你在做set $lambda。这会创建一个具有奇怪名称的变量。在Tcl中,您需要区分读取变量,使用$命名变量(以便命令可以更新它),当您#39; t使用$。除非您想要将一个变量的名称保留在另一个变量中,但最好只将其与upvar一起用于减少混淆,或切换到使用数组元素。