如何在TCL中的文件中写入不同的变量值

时间:2011-04-13 05:39:19

标签: file tcl

如何使用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
}  

但它没有用。

3 个答案:

答案 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