2011-04-13 20 views
0

如何使用foreach循環在TCL中編寫不同的變量值。
,這是這裏的情況:如何在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

您需要打開你指的是爲$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 
+0

見我的代碼親愛PROC testforeach {} { 組文件名/tmp/indrajeet_DBTEST_dbmode.sql 集DATA1 「這是DATA1值\ n」 個 集data2「這是data2的值」 set fo open('/ tmp/indrajeet_DBTEST_dbmode。SQL') 的foreach different_content {數據1數據2} { 把$ FO $ different_content } 接近$ FO } testforeach但它不工作,親愛的,請幫我。 – 2011-04-13 06:17:27

+0

注意:在這裏,我想在特定位置(即在臨時文件夾內)寫入文件。 – 2011-04-13 06:18:40

+0

開放的語法錯誤。這是Tcl而不是C/javascript/Java – slebetman 2011-04-13 06:19:32

3

沒有與代碼片段多個問題。第一個也是最簡單的錯誤是你沒有打開文件fo。除非是在你還沒有在這裏顯示的代碼做過的工作,你需要在你foreach循環之前一樣

set fo [open test.txt w] 

補充一下。

的第二個問題是,你的代碼會寫這個內容的文件:

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 
+0

真的,你是個偉大的人。謝謝。你明白我確切的問題,並給我確切的建議,它工作正常。非常感謝你。 – 2011-04-13 07:33:28

+0

如果他回答了你的問題,你應該接受他的回答。它看起來像你問了一些不同的問題,但沒有接受任何問題。 – RHSeeger 2011-04-13 14:51:04

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 
} 
+0

或者,在開始時將數據存儲在不同的數據結構中 – 2011-04-13 13:16:15

+0

@glenn:是的。使用(關聯)數組很有意義。 – 2011-04-15 12:24:59

相關問題