Есть несколько проблем с фрагментом кода. Первая и самая простая ошибка заключается в том, что вы нигде не открывали файл 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