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

Why can't i use same file channel twice in 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 再次打开该文件,它成功了!

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

谢谢

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

seek $fInp 0 start

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