我正在写一个小应用程序,它总是运行在windows上。
它有两个任务:
读取源自unix系统的文本文件,并输出具有相同内容但以windows文件结尾的新文件。
从windows系统中读取文本文件,并输出一个内容相同但以unix文件结尾的新文件。
信道输入端应该始终由tcl自动处理。
-然而,eofchar期望有两个参数,一个用于输入,一个用于输出。我必须将什么作为参数传递给-eofchar才能完成任务1和任务2?
我的make windows eof过程代码:
proc MakeWin {} {
# read file
set types {
{{All Files} * }
}
set filename [tk_getOpenFile -filetypes $types]
set infile [open $filename]
# open file for writing
set PathWname [tk_getSaveFile -filetypes $types -initialdir $DefPath -title "Save Results as:"]
set outfile [open $PathWname w]
# chan configure $outfile -eofchar ??
#
while {[gets $infile line] >= 0} {
puts $outfile $line
}
close $infile
close $outfile
}
最佳答案
形成manpage:
-煤焦
-eofchar{inchar outchar}
此选项支持使用control-z(\x1a)作为文件结束标记的DOS文件系统。如果char不是空字符串,则当在输入过程中遇到该字符时,该字符表示文件结束。对于输出,当通道关闭时输出文件结尾字符。如果char是空字符串,则没有特殊的文件结束字符标记。对于读写通道,两个元素列表分别指定输入和输出的文件结束标记。为了方便起见,在为读写通道设置文件结尾字符时,可以指定一个将同时应用于读写的值。查询读写通道的文件尾字符时,将始终返回两个元素列表。-eofchar的默认值在所有情况下都是空字符串,除了windows下的文件。在这种情况下,-eofchar是用于读取的control-z(\x1a),是用于写入的空字符串。-eofchar值的可接受范围是\x01-\x7f;尝试将-eofchar设置为超出此范围的值将生成错误。
我读这篇文章是说,要读取windows文件并编写unix,您不需要做任何事情--eofchar
对于输入是\x1a
对于输出默认是""
对于windows。要读取UNIX文件并写入窗口,请执行以下操作:
chan configure $infile -eofchar ""
chan configure $outfile -eofchar \x1a
如果通道是单向打开的,则似乎不需要指定输入和输出
eofchar
s。免责声明:这是基于阅读手册页;我从来没有做过这样的事情。