如何使用foreach循环在TCL中写入不同的变量值 这就是情况:
set data1 "This is Data1 Value\n"
set data2 "This is Data2 Value"
set data3 "\nThis is Data3 Value\n"
foreach different_content {data1 data2 data3} {
puts $fo $different_content
}
close $fo
}
但它没有用。
答案 0 :(得分:3)
代码片段存在多个问题。第一个也是最简单的错误是您没有打开文件fo
。除非在此处未在此处显示的代码中进行,否则您需要添加类似
set fo [open test.txt w]
在foreach
循环之前。
第二个问题是您的代码将把这些内容写入文件:
data1
data2
data3
但可能你打算写这个内容:
This is Data1 Value
This is Data2 Value
This is Data3 Value
这里的错误更加微妙。您的循环正在做的是将different_content
设置为每个感兴趣变量的名称,但您需要这些变量的值。基本上你需要双重解除引用different_content
变量。在变量名称的开头添加$
可以提供一个解除引用级别。不幸的是,对于Tcl,你不能只是将另一个$
打到前面来获得第二级。但您可以使用set
命令。毕竟,$
只是set
的合成糖:$foo
与[set foo]
相同。因此,我认为您需要重写循环体,如下所示:
puts $fo [set $different_content]
所以,把它们放在一起:
set data1 "This is Data1 Value\n"
set data2 "This is Data2 Value"
set data3 "\nThis is Data3 Value\n"
set fo [open test.txt w]
foreach different_content {data1 data2 data3} {
puts $fo [set $different_content]
}
close $fo
答案 1 :(得分:2)
Eric的答案很棒,但还有另外两种方法来编写foreach循环:
方法1(先前阅读变量):
foreach different_content [list $data1 $data2 $data3] {
puts $fo $different_content
}
方法2(使用upvar 0
为变量命名别名):
foreach different_var {data1 data2 data3} {
upvar 0 $different_var different_content
puts $fo $different_content
}
答案 2 :(得分:0)
您需要打开您所指的文件句柄$fo
但尚未实际打开:
set data1 "This is Data1 Value\n"
set data2 "This is Data2 Value"
set data3 "\nThis is Data3 Value\n"
set fo [open 'test.txt']
foreach different_content {data1 data2 data3} {
puts $fo $different_content
}
close $fo