首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TCL文件解析(一旦发现模式,循环读取后续行)?

TCL文件解析(一旦发现模式,循环读取后续行)?
EN

Stack Overflow用户
提问于 2019-09-13 21:13:12
回答 1查看 348关注 0票数 0

下面是我将使用TCL读取的文件中多次重复的序列。

代码语言:javascript
复制
Startpoint: FF1 (rising edge-triggered flip-flop clocked by Clk)
Endpoint: FF2 (rising edge-triggered flip-flop clocked by Clk)
Path Group: Clk
Path Type: max
Point                                           Incr   Path 
----------------------------------------------------------- 
clock Clk (rise edge)                           0.00   0.00
clock network delay (propagated)                1.10 * 1.10
FF1/CLK (fdef1a15)                              0.00   1.10 r
FF1/Q (fdef1a15)                                0.50 * 1.60 r
U2/Y (buf1a27)                                  0.11 * 1.71 r
U3/Y (buf1a27)                                  0.11 * 1.82 r
FF2/D (fdef1a15)                                0.05 * 1.87 r
data arrival time                                      1.87
clock Clk (rise edge)                           4.00   4.00
clock network delay (propagated)                1.00 * 5.00
FF2/CLK (fdef1a15)                                     5.00 r
library setup time                             -0.21 * 4.79
data required time                                     4.79                                           
------------------------------------------------------------ 
data required time                                     4.79
data arrival time                                     -1.87                                           
------------------------------------------------------------                                    
slack (MET) 2.92

开始用起始点表示,结尾用松弛表示。

我正在寻找一种方法来编写一个循环,它将读取第一行Startpoint。

然后文件指针指向后续的行,然后我对它们进行读取和后处理。

一旦遇到same,循环就会转到文件中的下一个起始点,并且同样的事情会重复。

只有当开始点线找到的时候,我才会继续做所有的处理。

只是在遇到Startpoint行时,文件指针转移到下一行的方法有困难。类似地,当遇到松弛行时,文件指针应该移到下一个起始点行。

我是新来的TCL,并试图想象这将如何运作。

Python相当于我想要的是:

打开用指针fp读取的文件

代码语言:javascript
复制
for line in fp:
   if startpoint found
   for next_line_in_file in fp:
      do post processing until slack line found and then continue from outer for loop
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-14 11:39:30

总的模式是:

代码语言:javascript
复制
while {[gets $channel line] >= 0} {
    # Skip lines until the start point
    if {![string match "Startpoint: *" $line]} continue
    set lines [list $line]
    # Accumulate lines until we have a whole section
    while {[gets $channel line] >= 0} {
        lappend lines $line
        if {[string match "slack *" $line]} break
    }
    # You'll need to provide a command — most likely a procedure — for this...
    postProcess $lines
}

伪代码的主要变化是,这会立即将整个行列表(表示从Startpoint:slack的所有内容)输入到后处理命令中。有了丰富的经验,这是一种使复杂处理块数据流的方法更容易,而不是尝试单独处理每一行(使用复杂的状态机等等;这是可能的,但相当困难,而且非常容易出错)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57930409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档