了解文本IO

时间:2012-10-21 09:29:30

标签: sml smlnj

我的函数是尝试逐行读取文本文件,并在名为somefn的每一行上执行某个预定义函数,并将somefn的值附加到函数中。 somefn已在上面定义并且工作正常。

fun extractline(infile:string)=
    let
    val insl=TextIO.inputLine(ins)
    case insl of
    NONE=> []
    |SOME(l)=>somefn(insl)::extractline(infile)
    in
    TextIO.closeIn(ins);
    end
;

我有错误,无法处理它们。 我将不胜感激。

谢谢。

1 个答案:

答案 0 :(得分:1)

请注意,在let ... in ... end块中,您可以在leti n之间放置所需的声明,以及inend之间的结果表达式。

因此,您需要在casein之间放置end表达式。

您也永远不会打开流ins。让你的函数打开流,然后在另一个函数中递归地在该流上工作;你不想为每次递归调用打开文件。

您需要此表单上的内容:

fun extractline file =
  let
      val ins = TextIO.openIn file

      fun extractline_h () = (* do something with ins here *)
  in
      extractline_h () before
      TextIO.closeIn ins
  end

然后让extractline_h递归,并在其中构建列表。