Сочетание 2 команд в TCL
Вот результаты некоторых команд TCL.
get_props -type assert
{"a", "b", "c", "d"}
Теперь все эти 4 объекта имеют определенные атрибуты, связанные с ними. Но меня интересует только атрибут "enabled".
get_attribute [get_props a] enabled
true
get_attribute [get_props b] enabled
false
get_attribute [get_props c] enabled
true
get_attribute [get_props d] enabled
false
Теперь я хочу преобразовать только "включенные" объекты (enabled = true) из этих 4 объектов типа "assert" в объекты типа "cover" (поэтому должны быть преобразованы только "a" и "c") и для преобразования "assert" в "обложке" команда fvcover.
Я попробовал следующую команду:
fvcover [get_props -type assert]
Теперь проблема в том, что эта команда fvcover конвертирует все 4 объекта типа "assert" в объекты типа "cover", а не просто "a" и "c".
Думаю, мне нужно объединить обе команды get_props и get_attributes, но я не знаю, как это сделать.
Так как решить эту проблему?
Примечание:- "a", "b", "c", "d" только для объяснения. В действительности команда get_props может вернуть любое количество результатов с любым именем. Но из этого списка мне нужно преобразовать только те объекты, у которых атрибут "enabled" имеет значение true.
1 ответ
Списки не в формате Tcl. Вот некоторый тестовый код, который вы можете использовать для преобразования из вашего формата в Tcl.
#### PROCS FOR TESTING ####
proc get_props {type {assert no}} {
if {$type == "-type" && $assert == "assert"} {
return {"a", "b", "c", "d"}
}
if {$type == "a" || $type == "c"} {
return [list enabled true]
} elseif {$type == "b" || $type == "d"} {
return [list enabled false]
}
return [list NOT FOUND]
}
proc get_attribute {a k} {
foreach {key value} $a {
if {$key == $k} {
return $value
}
}
return NOT_FOUND
}
# get props. props is in a list format that is not native tcl list
set props [get_props -type assert]
# convert props to tcl list
set props_list [string map {, ""} $props]
# make a list to catch enabled props
set enabled_props [list]
# add enabled props to new list
foreach {prop_name} $props_list {
if {[get_attribute [get_props $prop_name] enabled] == "true"} {
lappend enabled_props "\"$prop_name\""
}
}
# convert enabled_props to your format
set enabled_props "{[join $enabled_props ", "]}"
# run your program on $enabled_props
puts $enabled_props