在tcl中是否有办法避免在写入文件的末尾使用换行符?
puts $file $line
感谢。
答案 0 :(得分:6)
首先,除非您还指定了puts
选项,否则-nonewline
始终会写入您提供的最后一个参数,后跟换行符。
在循环中编写行时,您不希望在最后一行的末尾有换行符,您实际上是使用\n
作为行分隔符而不是一行终结者。要在不在单个字符串中构建所有数据的情况下执行此操作,最简单的方法是使用额外的变量来保存分隔符并使其开始为空。
# Initially
set separator ""
# Inside the loop
puts -nonewline $file $separator$line
set separator "\n"
将(希望是本地的)变量设置为常量值是每次迭代需要做的少量额外工作,并且很容易确保这样做是正确的。
(当然,如果你真的在写一个文件,你也可以在循环之后使用seek
或chan truncate
来修补补丁。虽然这很难做到 - “newline”isn' t始终写为单个字节,具体取决于fconfigure -translation
选项 - 并且根本不适用于非文件通道。在这种情况下不推荐!)
答案 1 :(得分:4)
如果你已经拥有内存中的所有行:
puts -nonewline $file [join $lines \n]
答案 2 :(得分:1)
也许:
puts -nonewline $file $line
答案 3 :(得分:0)
这是怎么回事?
puts -nonewline $file "\n$line"