我刚刚开始学习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和...)。 我想出了一个简单的脚本,只是为了逐行读取整个文件,但我不知道该怎么做。谢谢
答案 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;线,这被简单地忽略了。