我正在写一个小应用程序,它总是运行在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

如果通道是单向打开的,则似乎不需要指定输入和输出eofchars。
免责声明:这是基于阅读手册页;我从来没有做过这样的事情。

10-07 15:09