如何将文件中的字符输出到SML / NJ中的stdin?这是我到目前为止所做的,但我现在卡住了,因为我从编译器那里得到了错误。
代码:
fun outputFile infile =
let
val ins = TextIO.openIn infile;
fun helper copt =
case copt of
NONE = TextIO.closeIn ins;
| SOME(c) = TextIO.output1(stdIn,c);
helper(TextIO.input1 ins));
in
helper ins
end;
关于我哪里出错的任何想法?
答案 0 :(得分:2)
嗯,这取决于你要对文件输入做什么。如果您只想打印从文件中读取的字符,而不将其输出到另一个文件,那么您只需打印输出:
fun outputFile infile = let
val ins = TextIO.openIn infile;
fun helper copt = (case copt of NONE => TextIO.closeIn ins
| SOME c => print (str c); helper (TextIO.input1 ins));
in
helper (TextIO.input1 ins)
end;
outputFile "outtest"; (*If the name of your file is "outtest" then call this way*)
但是,上面的示例很糟糕,因为它会给你无限循环,因为即使它达到NONE,也不知道如何终止和关闭文件。因此,此版本更清晰,更易读并终止:
fun outputFile infile = let
val ins = TextIO.openIn infile;
fun helper NONE = TextIO.closeIn ins
| helper (SOME c) = (print (str c); helper (TextIO.input1 ins));
in
helper (TextIO.input1 ins)
end;
outputFile "outtest";
如果您只想将infile
的内容输出到另一个文件,那么这是另一个故事,在这种情况下您必须打开输出文件句柄。