1

我正在编写一个始终在 Windows 上运行的迷你应用程序。它有两个任务:

  1. 读取源自 unix 系统的文本文件并输出具有相同内容但以 windows 文件结尾的新文件。

  2. 从 Windows 系统读取文本文件并输出具有相同内容但以 unix 文件结尾的新文件。

应始终从 tcl 自动处理通道输入行尾。

但是 -eofchar 需要两个参数,一个用于输入,一个用于输出。我必须将什么作为参数传递给 -eofchar 以完成任务 1 以及完成任务 2 的内容?

我的 make windows eof proc 代码:

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
}
4

1 回答 1

2

形成手册页

-eofchar 字符

-eofchar {inChar outChar}

此选项支持使用 Control-z (\x1a) 作为文件结束标记的 DOS 文件系统。如果 char 不是空字符串,则在输入过程中遇到此字符时会发出文件结束信号。对于输出,当通道关闭时输出文件结束符。如果 char 是空字符串,则没有特殊的文件结尾字符标记。对于读写通道,一个二元素列表分别指定输入和输出的文件结束标记。为方便起见,在为读写通道设置文件结尾字符时,您可以指定一个同时适用于读取和写入的值。查询读写通道的文件结束符时,总是返回一个二元列表。-eofchar 的默认值在所有情况下都是空字符串,Windows 下的文件除外。在这种情况下,-eofchar 是 Control-z (\x1a) 用于读取和空字符串用于写入。-eofchar 值的可接受范围是 \x01 - \x7f;尝试将 -eofchar 设置为超出此范围的值将产生错误。

我读这篇文章的意思是,要读取 Windows 文件并编写 UNIX,您无需执行任何操作 -在 Windows-eofchar上默认\x1a用于输入和""输出。要读取 UNIX 文件并写入窗口,请执行

chan configure $infile -eofchar ""
chan configure $outfile -eofchar \x1a

如果通道是单向打开的,似乎不需要指定 inputoutput 。eofchar

免责声明:这是基于阅读手册页;我自己从来没有做过这种事情。

于 2013-06-27T08:06:04.790 回答