使用 tcl 从文件中获取变量的值
Get the value for a variable from file using tcl
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 的值,修改它,然后再次将其写入文件。我正在使用处理 tcl 执行文件的 ns-2。
但是 lambda 的值没有改变......
你能找出错误所在吗?
最好写一个小程序来读取文件和 return 它的内容,然后再写一个写回值。
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 中,当您使用 $
时,您需要区分 read 变量和 naming 变量(因此命令可以更新它),当你不使用 $
时。除非你想将一个变量的名称保留在另一个变量中,但最好只将它与 upvar
一起使用,以真正减少混淆,或者切换到使用数组元素。
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 的值,修改它,然后再次将其写入文件。我正在使用处理 tcl 执行文件的 ns-2。 但是 lambda 的值没有改变...... 你能找出错误所在吗?
最好写一个小程序来读取文件和 return 它的内容,然后再写一个写回值。
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 中,当您使用 $
时,您需要区分 read 变量和 naming 变量(因此命令可以更新它),当你不使用 $
时。除非你想将一个变量的名称保留在另一个变量中,但最好只将它与 upvar
一起使用,以真正减少混淆,或者切换到使用数组元素。