Сочетание 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
Другие вопросы по тегам