为什么我不能在 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
在第一个循环之后会将其重置为文件的开头,以便您可以在第二个循环中再次阅读它。
我正在编写一个看起来像这样的 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
在第一个循环之后会将其重置为文件的开头,以便您可以在第二个循环中再次阅读它。