与通配符模式匹配的顶层实例名称

author-image

作者

此设计示例提供了一个 Tcl 程序,可返回与通配符模式匹配的顶层实例名称。将此程序复制并粘贴到 Tcl 脚本中,然后调用此程序。
此程序在列表中返回实例名称。如果没有与通配符模式匹配的顶层实例名称,此程序将返回一个空列表。实例名称以任意顺序返回。如果希望以特定顺序(如按字母顺序)返回实例名称列表,请使用 lsort 命令对其进行适当排序。
例如,如果设计中的顶层实例名称为 foo1、foo2、foo3、bar1、bar2bar3,调用

get_top_level_instances_matching *2 程序后,将返回 { foo2 bar2 }

proc get_top_level_instances_matching { wildcard } {

    # 编写一个变量,用于容纳与通配符匹配的顶层实例
    catch { array unset names_to_return }
    array set names_to_return [list]
    
    # 名称集合中的名称均为设计中的层次
    foreach_in_collection name_id [get_names -filter * -node_type hierarchy] {
    
        # short_full_path 选项以 instance|instance|... 的形式
        # 获取名称
        # 无论“显示节点名称的实体名称”
        # 设置开启还是关闭,仅使用实例
        set short_full_name [get_name_info -info short_full_path $name_id]
        
        # 将层次结构拆分成列表,在层次分隔符 | 处
        # 进行拆分
        set short_full_pieces [split $short_full_name "|"]
        
        # 获取顶层实例名称 - 列表中的第一项
        set top_level_instance [lindex $short_full_pieces 0]
        
        # 如果顶层实例名称与通配符匹配,将其保存,
        # 以便在程序结束时返回
        if { [string match $wildcard $top_level_instance] } {
            set names_to_return($top_level_instance) 1
        }
    }
    
    return [array names names_to_return]
}