如何在方括号中获取特定参数并将其存储在tcl中的特定变量中

时间:2017-02-11 14:28:49

标签: tcl

set_dont_use [get_lib_cells */*CKGT*0P*] -power
set_dont_use [get_lib_cells */*CKTT*0P*] -setup

以上是一个文本文件。

我想将* / CKGT OP *和* / CKTT OP *存储到变量中这是一个人帮助我的程序

set f [open theScript.tcl]
# Even with 10 million lines, modern computers will chew through it rapidly
set lines [split [read $f] "\n"]
close $f

# This RE will match the sample lines you've told us about; it might need tuning
# for other inputs (and knowing what's best is part of the art of RE writing)
set RE {^set_dont_use \[get_lib_cells ([\w*/]+)\] -\w+$}

foreach line $lines {
    if {[regexp $RE $line -> term]} {
        # At this point, the part you want is assigned to $term
        puts "FOUND: $term"
    }
}

我的问题是,是否有多个单元格,例如

set_dont_use [get_lib_cells */*CKGT*0P* */*CKOU*TR* /*....] -power
set_dont_use [get_lib_cells */*CKGT*WP* */*CKOU*LR* /*....] -setup

然后上面的脚本并没有帮我存储这些" n"数字中的单元格称为术语

你可以帮助我吗? 及时感谢你

2 个答案:

答案 0 :(得分:1)

我会选择

proc get_lib_cells args {
    global term
    lappend term {*}$args
}

proc unknown args {}

然后只是

source theScript.tcl

在一个没有加载模块的shell中,因此不知道任何这些非标准命令。

通过将unknown设置为什么都不做,脚本中的其他命令将被传递。

请注意,重新定义unknown会削弱Tcl自动加载某些进程的能力,因此请勿在此之后继续使用该解释程序。

文档: globallappendprocunknown{*} (syntax)

答案 1 :(得分:0)

您的编码似乎是Synopsys的语法,意思是 - 它不应该按照您的编写方式工作,我希望花括号:
graph.data.frame(d =aggdat1, directed = F)
此外,set_dont_use [get_lib_cells {*/*CKGT*0P* */*CKOU*TR* /*....}] -power没有抓住*,/(请参阅this)。 如果我是你,我会去\w并将结果模式匹配视为列表。

修改
看到这个:
%regexp {^ set_dont_use [get_lib_cells {?(\ S +)?}?]} $ line - >比赛
1
%echo $ match
* / * * CKGT 0P *
如果您的行中有多个项目,请在花括号内添加另一个括号:
set RE {^set_dont_use \[get_lib_cells \{?([\S*]+ )+\}?\] -\w+$}
等。
另一个编辑
看看this,以防你想要使用相同的单一模式进行多次匹配,但是,除了\ S +之外,你应该尝试看起来像这样的东西:regexp {^set_dont_use \[get_lib_cells \{?(\S+) ?(\S+)?\}?\]} $l -> m1 m2