1

究竟如何将文件中的字符输出到 SML/NJ 中的标准输入?这是我到目前为止所拥有的,但我目前被卡住了,因为我收到了编译器向我抛出的错误。

代码:

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;

关于我要去哪里错的任何想法?

4

1 回答 1

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到另一个文件,那就是另一回事了,在这种情况下您必须打开一个文件句柄进行输出。

于 2013-04-09T22:01:43.907 回答