如何在 tcl 中创建具有给定名称和内容的文件?

How to create a file with given name and contents in tcl?

以下的 tcl 等价物是什么?

cat <<EOF > example/file.txt
example
file
contents
EOF

我目前拥有的:

set outfile [open "example/file.txt" w]
try {
  puts $outfile "example
file
contents"
} finally {
  close $outfile
}

我不喜欢的:

  1. 打开、设置、try/finally、放置、关闭 - 树木太多,森林无法隐藏
  2. 内容的第一行必须采用奇怪的格式,否则我会在文件开头得到一个额外的空行

#2 的答案是 string trim

set contents {
example
file
contents
}

puts $outfile [string trim $contents]

处理“复杂性”的方法是将代码放在过程中。那你可以忽略复杂性。

proc writefile {filename contents} {
    set outfile [open $filename w]
    try {
        puts $outfile $contents
    } finally {
        close $outfile
    }
}

writefile example/file.txt "example
file
contents"

如果你愿意,你可以在写入之前添加适当的 trim 内容(Tcl 不会 trim 东西,除非你要求它)。

proc writefile {filename contents} {
    set outfile [open $filename w]
    try {
        puts $outfile [string trim $contents "\n"]
    } finally {
        close $outfile
    }
}

writefile example/file.txt "
example
file
contents
"

如果您想要更复杂的 trimming(或其他处理)规则,将它们放在过程中意味着您不必用它们弄乱其余代码。但是可能的规则范围非常;你很快就会完全 application-specific 东西。