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"数字中的单元格称为术语
你可以帮助我吗? 及时感谢你答案 0 :(得分:1)
我会选择
proc get_lib_cells args {
global term
lappend term {*}$args
}
proc unknown args {}
然后只是
source theScript.tcl
在一个没有加载模块的shell中,因此不知道任何这些非标准命令。
通过将unknown
设置为什么都不做,脚本中的其他命令将被传递。
请注意,重新定义unknown
会削弱Tcl自动加载某些进程的能力,因此请勿在此之后继续使用该解释程序。
文档: global, lappend, proc, unknown, {*} (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