在tcl中,如何在打开的文件中编辑字符串?

时间:2016-08-19 08:07:30

标签: tcl

假设我使用以下方式打开了一个文件:

set in [open "test.txt" r]

我打算在某一行修改一些字符串,例如:

style="fill:#ff00ff;fill-opacity:1" 这个行号是:20469

我想将值ff00ff修改为其他字符串值,例如ff0000

这样做的正确方法是什么?提前谢谢!

1 个答案:

答案 0 :(得分:0)

您需要以读写模式打开文件; r+模式可能是合适的。

在大多数情况下,如果文件的长度达到合理的兆字节数,您可以read将整个文件转换为字符串,使用regsub之类的命令对其进行处理以执行内存更改,以及然后在seek到文件的开头后写回整个事情。由于您没有更改文件的大小,因此效果很好。 (缩短文件需要明确截断。)

set f [open "test.txt" r+]
set data [read $f]
regsub {(style="fill:#)ff00ff(;fill-opacity:1)"} $data {\1ff0000\2} data
seek $f 0
puts -nonewline $f $data
# If you need it, add this here by uncommenting:
#chan truncate $f
close $f

还有其他方法可以替换;选择取决于你正在做什么的细节。