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

标签 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 的值没有改变...... 你能找出错误在哪里吗?

最佳答案

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

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 中,当您使用 $ 时,您需要区分读取变量和命名变量(以便命令可以更新它),当您不使用 $ 时。除非您想将一个变量的名称保留在另一个变量中,但最好仅将其与 upvar 一起使用,以真正减少困惑,或者切换到使用数组元素。

关于file - 使用 tcl 从文件中获取变量的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29186107/

相关文章:

java - Android 选择并打开带有自定义扩展名的文件

exec - 在 Unix 上的 Tcl 中,如何杀死已使用 exec 启动的后台进程?

multidimensional-array - 在 Tcl 中动态创建数组

linux - 排序列表...完成!段错误(核心已转储)

tcp - 如何在模拟中设置 TCP 数据包速率

networking - NS2:链接的随机延迟

c - 有没有一种简单的方法可以从文件中使用 SDL 创建字符串?

c++ - 以二进制模式写入文件不起作用

java - FileOutputStream 是否截断现有文件

python - 从 Python 运行 TCL 代码