1

tcl 有没有办法避免在写入文件的末尾有换行符?

puts $file $line

谢谢。

4

4 回答 4

9

首先,除非您还指定了选项puts,否则始终写入您给出的最后一个参数,然后是换行符。-nonewline

在循环中写行时,您不希望在最后一行的末尾有换行符,您实际上是在\n用作行分隔符而不是行终止符。要做到这一点而不在单个字符串中构建所有数据,最简单的方法是使用一个额外的变量来保存分隔符并让它开始为空。

# Initially
set separator ""
# Inside the loop
puts -nonewline $file $separator$line
set separator "\n"

将(希望是局部的)变量设置为常量值是每次迭代需要做的少量额外工作,而且很容易确保这样做是正确的。

(当然,如果你真的在写入一个文件,你也可以使用seekchan truncate在循环之后进行修补。虽然这更难做到——“换行符”并不总是写为单个字节,具体取决于fconfigure -translation选项——并且根本不适用于非文件通道。在这种情况下不推荐!)

于 2013-09-08T22:39:33.003 回答
4

如果您已经拥有内存中的所有行:

puts -nonewline $file [join $lines \n]
于 2013-09-08T22:25:35.587 回答
1

也许:

puts -nonewline $file $line
于 2013-09-08T20:13:41.600 回答
0

那这个呢?

puts -nonewline $file "\n$line"
于 2013-09-08T20:33:45.230 回答