如何避免写入文件末尾的换行符

use*_*068 0 file tcl

是否有一种方法在tcl中避免在写入文件的末尾使用换行符?

puts $file $line
Run Code Online (Sandbox Code Playgroud)

谢谢.

Don*_*ows 7

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

在循环中编写行时,您不希望在最后一行的末尾有换行符,您实际上使用的\n是行分隔符而不是行终止符.要在不构建单个字符串中的所有数据的情况下执行此操作,最简单的方法是使用额外的变量来保存分隔符并使其开始为空.

# Initially
set separator ""
Run Code Online (Sandbox Code Playgroud)
# Inside the loop
puts -nonewline $file $separator$line
set separator "\n"
Run Code Online (Sandbox Code Playgroud)

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

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