TCL在特殊边界内抓词 [英] TCL grabbing words within special boundaries
本文介绍了TCL在特殊边界内抓词的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
反对:获取{"}"边界内的所有单词.
Objection : get the all words within the "{" "}" boundary.
input_file.txt:
input_file.txt:
set_false_path -from [get_ports {a/b[1] ab/cd_1 abcd_1_ad_}] -through [get_pins {th/th1 th2/th2[2]}]
set_derate -whatever [get_ports {xxx/xx1 xxx xxxx_1}]
set_false_path 3 -to [get_pins {aaa/d aaa/b}] -from [get_abc {abc/ac/dd nnn_2/2}]
预期的 output_file.txt:
expected output_file.txt:
a/b[1]
ab/cd_1
abcd_1_ad_
th/th1
th2/th2[2]
aaa/d aaa/b
abc/ac/dd
nnn_2/2
注意:可能有两对或更多对 "{" "}" ,我想抓住 "{" 和 "}" 中的所有单词,无论它们有多少.
NB: there might be two or more pair of "{" "}" , and I want to grab all of those words within "{" and "}" no matter how many they are.
这是我的代码:
set inputfile [open "input_file.txt" r]
set outputfile [open "output_file.txt" w]
while { [gets $inputfile line] != -1 } {
set first_word [lindex [split $line ""] 0]
if { regexp "set_false_path" $first_word} {
# HOW TO grab all words between "{" and "}" ; split them ; put on output_file
}
} else {
}
close $inputfile
close $outputfile
推荐答案
由于您没有将行拆分为多行,因此您可以使用比 之前的脚本:
Since you don't have the lines split on several lines, you can use a simpler script than the previous script:
set inputfile [open "input_file.txt" r]
set outputfile [open "output_file.txt" r]
while {[gets $inputfile line] != -1} {
# If starts with set_false_path, process
if {[lindex [split $line " "] 0] eq "set_false_path"} {
# Grab each element with regexp into a list and print each to outputfile
# m contains whole match, groups contains sub-matches
foreach {m groups} [regexp -all -inline -- {\{([^\}]+)\}} $line] {
# Trim any trailing/leading spaces
set groups [string trim $groups]
foreach out [split $groups] {
puts $outputfile $out
}
}
}
}
close $inputfile
close $outputfile
这篇关于TCL在特殊边界内抓词的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文