在Tcl中:分别将-eofchar设置为windows / unix

我正在写一个小程序,它总是在Windows上运行。 它有两个任务:

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

  2. 从Windows系统中读取一个文本文件,然后输出一个新的文件,其内容相同但unix文件结束。

线路的通道input端应始终由tcl自动处理。

然而,eofchar期望两个曲线,一个用于输出。 我有什么要作为parameter passing给-eofchar来完成任务1和完成任务2?

我的代码为make窗口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 } 

形成手册页 :

-eofchar字符

-eofchar {inChar outChar}

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

我读这个是为了读一个windows文件并写UNIX,你不需要做任何事情 – -eofchar\x1a的输入,而"" \x1a ""是默认在Windows上输出的。 要读取一个UNIX文件并写入窗口,请执行

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

如果通道单向打开,似乎没有必要指定输入输出eofchar

免责声明 :这是基于阅读的manpage; 我从来没有做过这样的事情。