Как записать другое значение переменной в файл в TCL - PullRequest
0 голосов
/ 13 апреля 2011

Как записать другое значение переменной в TCL, используя цикл foreach.
Вот такая ситуация:

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 ]

3 голосов
/ 13 апреля 2011

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

Ответ Эрика великолепен, но есть два других способа написать цикл 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 голосов
/ 13 апреля 2011

Вам нужно открыть дескриптор файла, который вы называете $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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...