为什么我不能在 TCL 中使用两次相同的文件通道



我正在写一个TCL程序,看起来像这样:

#!/usr/bin/tclsh
set fInp [open file1.txt r]
while {[gets $fInp line] >= 0} {
statement 1
statement 2
}
statement 3
statement 4
while {[gets $fInp line] >=0} {
statement 5
statement 6
}
close $fInp

我本以为这会很好,但令我惊讶的是,第二个while循环根本没有执行。我得出的结论是,我们不能使用相同的文件描述符(或通道(在TCL中读取两次文件

所以我关闭了fInp,并使用fInp2再次打开了该文件,它成功了!

这种行为背后的原因是什么?还有其他方法吗?

感谢

这是我熟悉的每种编程语言和操作系统中读取文件的正常行为。一旦在第一个循环中读到文件的末尾,就没有什么可读的了。不过,您可以使用seek命令重置并调整文件内容的内部偏移。

seek $fInp 0 start

在第一个循环之后,会将其重置为文件的开头,这样您就可以在第二个循环中再次读取它。

相关内容

  • 没有找到相关文章

最新更新