我想打开一个预先存在的文件,并且想要在文件中添加一个字符串,然后才会看到“退出”字样。在文件里面。单词'退出'将始终是文件中的最后一行,因此我们也可以将其视为"在最后一行上方添加一行#34;问题。换句话说,我想在文件中附加此字符串。这是例子 Example.tcl(之前)
AAAAAAA
BBBBBBB
CCCCCC
exit
Example.tcl(after)
AAAAAAA
BBBBBBB
CCCCCC
new_word_string
exit
欢迎任何建议。
答案 0 :(得分:1)
工作代码:
打开文件进行阅读,并打开一个临时文件:
set f1 [open $thefile]
set f2 [file tempfile]
一次读取一行,直到读完所有行。看看这条线。如果是字符串"exit"
,则将新字符串打印到临时文件。将您读取的行写入临时文件。
while {[set line [chan gets $f1]] ne {}} {
if {$line eq "exit"} {
chan puts $f2 $thestring
}
chan puts $f2 $line
}
关闭文件并重新打开以供阅读。
chan close $f1
set f1 [open $thefile w]
将临时文件倒回到起始位置。
chan seek $f2 0
读取临时文件的全部内容并将其打印到文件中。
chan puts -nonewline $f1 [chan read -nonewline $f2]
关闭这两个文件。
chan close $f1
chan close $f2
我们已经完成了。
您可以使用字符串缓冲区而不是具有最小更改的临时文件,例如:
set f [open $thefile]
set tempstr {}
while {[set line [chan gets $f]] ne {}} {
if {$line eq "exit"} {
append tempstr $thestring\n
}
append tempstr $line\n
}
chan close $f
set f [open $thefile w]
chan puts -nonewline $f $tempstr
chan close $f
答案 1 :(得分:0)
您可以将工作分配到外部命令(毕竟Tcl是作为粘合语言编写的):
% exec cat example.tcl
AAAAAAA
BBBBBBB
CCCCCC
exit
% set new_line "this is the new line inserted before exit"
this is the new line inserted before exit
% exec sed -i "\$i$new_line" example.tcl
% exec cat example.tcl
AAAAAAA
BBBBBBB
CCCCCC
this is the new line inserted before exit
exit