0

Tcl 中是否有任何方法或命令可以在 {data.txt} 中间写入以及特定的行号...?例如,在文本文件中写入数据后,当我在第 1000 行写入时,有没有办法返回第 20 行并在此行中添加数据以进行输出。(对于列表变量,看起来像 llappend & append,但在 puts 命令中)

4

1 回答 1

0

您可以使用seek在文件上打开的通道中移动当前位置(对于管道、套接字和串行线没有意义);下一次读取 ( gets, read) 或写入 ( puts) 将在此时发生。除了在附加模式下,写入总是到最后。

seek $channel $theNewLocation

但是, to seekto的位置以字节为单位;唯一容易到达的位置是文件的开头和文件的结尾(后者使用基于结尾的索引)。因此,您需要记住“第 20 行”从第一次开始的真正位置,或者从头开始并向前阅读几行。

seek $channel 0
for {set i 0} {$i < 20} {incr i} {gets $channel}

另请注意,之后的数据不会上下移动以适应您第二次编写的内容。如果您没有写入与已经存在的数据长度完全相同的数据,则最终会在文件中出现部分行。截断文件chan truncate可能会有所帮助,但也可能是完全错误的做法。如果您要返回并修补文本文件,则在要进行修补的地方写一个超长的行(例如,末尾有很多空格)可以使它更容易。这是一个俗气的黑客,但做起来很简单。

于 2015-03-12T09:55:54.283 回答