通过tcl在文件中追加一个字符串

时间:2014-07-16 16:52:57

标签: file unix tcl

我想打开一个预先存在的文件,并且想要在文件中添加一个字符串,然后才会看到“退出”字样。在文件里面。单词'退出'将始终是文件中的最后一行,因此我们也可以将其视为"在最后一行上方添加一行#34;问题。换句话说,我想在文件中附加此字符串。这是例子 Example.tcl(之前)

AAAAAAA    
BBBBBBB    
CCCCCC    
exit

Example.tcl(after)

AAAAAAA    
BBBBBBB    
CCCCCC    
new_word_string   
exit  

欢迎任何建议。

2 个答案:

答案 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

文档:appendchanifopensetwhile

答案 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