tcl 有没有办法避免在写入文件的末尾有换行符?
puts $file $line
谢谢。
首先,除非您还指定了选项puts
,否则始终写入您给出的最后一个参数,然后是换行符。-nonewline
在循环中写行时,您不希望在最后一行的末尾有换行符,您实际上是在\n
用作行分隔符而不是行终止符。要做到这一点而不在单个字符串中构建所有数据,最简单的方法是使用一个额外的变量来保存分隔符并让它开始为空。
# Initially
set separator ""
# Inside the loop
puts -nonewline $file $separator$line
set separator "\n"
将(希望是局部的)变量设置为常量值是每次迭代需要做的少量额外工作,而且很容易确保这样做是正确的。
(当然,如果你真的在写入一个文件,你也可以使用seek
或chan truncate
在循环之后进行修补。虽然这更难做到——“换行符”并不总是写为单个字节,具体取决于fconfigure -translation
选项——并且根本不适用于非文件通道。在这种情况下不推荐!)
如果您已经拥有内存中的所有行:
puts -nonewline $file [join $lines \n]
也许:
puts -nonewline $file $line
那这个呢?
puts -nonewline $file "\n$line"