我正在编写一个 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
Run Code Online (Sandbox Code Playgroud)
我原以为它能正常工作,但令我惊讶的是,第二个 while 循环根本没有被执行。我得出的结论是,我们无法使用相同的文件描述符(或通道)两次读取 TCL 中的文件
所以我关闭了 fInp 并使用 fInp2 再次打开该文件,它起作用了!
这种行为背后的原因是什么?还有其他方法吗?
谢谢
这是从我熟悉的每种编程语言和操作系统中读取文件的正常行为。一旦在第一个循环中读到文件末尾,就没有什么可读的了。不过,您可以使用该命令重置和调整文件内容的内部偏移量seek。
seek $fInp 0 start
Run Code Online (Sandbox Code Playgroud)
在第一个循环之后会将其重置到文件的开头,以便您可以在第二个循环中再次读取它。
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |