替换和范围替换输出
问题描述:
我想通过内存和我的情况如下替换文件中的一行;替换和范围替换输出
-
第一种情况;为什么在每次运行下脚本仍然在最后一个列表字符串之后添加空行?没有记忆的任何选项?
set lines [split [read $fp] "\n"] close $fp lset lines 5 {TESTT} set fp [open $flnm w] puts $fp [join $lines \n] close $fp
第二种情况;如何更换范围线?
答
数据以最后一个换行符开头;因为split
正在使用它作为分隔符,这会在其生成的列表结尾处产生一个空元素。 然后,当你写出来,join
重新创建文件的内容(受你添加的改动)和puts
后添加一个换行符,因为puts
被记录为做到这一点。
你可能想使用-nonewline
选项,因为你采取的新行的控制自己:
puts -nonewline $fp [join $lines \n]
要更换一系列的列表的元素(因此行范围内) ,你应该使用lreplace
命令。但是,它会获取一个列表值并返回一个列表值;它不会像lset
那样进行就地编辑:
set insertion [list "insert me #1" "insert me #2" "insert me #3" "insert me #4"]
set lines [lreplace $lines 5 7 {*}$insertion]
第一种情况是完美的。非常感谢,唐纳德! – Andre
@Andre,你也可以使用'read -nonewline'而不是'puts -nonewline' - 当你获取数据时会处理这个问题,所以你的行列表已经没有空的最后一个元素。 –