输出文件到stdin

时间:2013-04-09 00:27:14

标签: sml smlnj

如何将文件中的字符输出到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;

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

1 个答案:

答案 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的内容输出到另一个文件,那么这是另一个故事,在这种情况下您必须打开输出文件句柄。