如何使用tcl读取文件的每个部分?

时间:2014-11-06 09:42:18

标签: tcl

我刚刚开始学习tcl,我在阅读大文件时遇到了问题。 我有一个如下所示的数据文件:

420
360 360 360 3434.01913
P 6.9022 0.781399 -0.86106
C 4.36397 -0.627479 3.83363
P 6.90481 5.42772 3.08491
....

并以此结尾:

P -7.21325 1.71285 -0.127325
C -4.14243 0.41123 4.67585
420
360 360 360 3210.69667

所以C是一个部分的最后一行,420是下一部分的开始。所以每420行构成整个文件的一部分。 我怎样才能阅读这个文件的每一部分,并像#34; frame1"并执行此操作直到文件结束(具有frame2,frame3和...)。 我想出了一个简单的脚本,只是为了逐行读取整个文件,但我不知道该怎么做。谢谢

1 个答案:

答案 0 :(得分:0)

您的问题的答案"如何使用tcl阅读文件的每个部分?"非常简单"继续阅读,直到你的线条耗尽"。

问题的答案"如何计算部分并跳过标题行"是这样的:

while { ...condition... } {
    if {[gets $fp line] < 0} break

    lassign $line name x y z
    if {$name eq "420"} {
        incr section_counter
    } elseif {$name in {P C}} {
        # do something with the data
    }
}

对于每行读取,您的while循环的条件将被测试一次。读取完整个文件后,第一个if命令会中断循环。除非您希望其中一行包含不是正确列表的字符串,否则您不需要拆分您读取的行。将行的字段分配到变量后,您可以查看name内部以查看您获得的行类型。第二个if命令表示如果$name是字符串&#34; 420&#34;,则会增加分区计数器。另一方面,如果$name包含&#34; P&#34;或者&#34; C&#34;,您有一个要处理的数据线。如果这些条件都不满足,那么你就可以在&#34; 420&#34;线,这被简单地忽略了。

文档:breakgetsifincrlassignwhile