TCL - проверить, содержит ли файл значение переменной и вернуть ли часть строки - PullRequest
0 голосов
/ 02 июня 2018

Я хотел бы спросить о "ПОЧЕМУ?"и некоторая помощь со странной проблемой с чтением файла.

У меня есть файл со значениями, такими как:

var1=home
var2=dog

В моем коде я пытаюсь найти имя переменной, получить строку, где она расположена, обрезать ее и получить значение (например, home)

То, что я использую, чтобы получить его:

puts [regexp { $var_name*\s*=\s*\s*(\S+)\s*} $line all ip_ftpAI]

Я также сделал небольшую проверку раньше:

if {[string match $var_name "var1"]} { puts " value ok:$var_name"

Это всегда так же, как истина

Когда я меняю $var_name на обычную строку, такую ​​как "home", она работает, но решение - только для одной возможности.

Может кто-нибудь дать мне совет, как справиться с проблемой?

1 Ответ

0 голосов
/ 03 июня 2018

Переменная не раскрывается, поскольку находится в фигурных скобках.См. https://tcl.tk/man/tcl8.6/TclCmd/Tcl.htm rule # 6

Сделайте это, чтобы построить регулярное выражение:

set var_name "var1"
append regex $var_name {\s*=\s*(\S+)}
if {[regexp -- $regex $line all value]} {
    puts "$var_name value is $value"
}

Вместо добавления вы можете использовать эквивалент Tcl для sprintf:

set regex [format {%s\s*=\s*(\S+)} $var_name]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...