将单个字符串写入新文件(SML)

时间:2014-03-04 12:47:22

标签: io sml

我正在编写一个返回字符串的函数,问题是我想将此字符串存储在一个新文件中,如果在计算机上找不到该文件,则应该创建该文件。函数创建的每个字符串都应该一个接一个地放在同一个文本文件中。如何在SML中实现?我现在已经坚持了一段时间,可能真的需要一些帮助。

我想要使用它的代码部分看起来像(show(solveAux(nls, sl, match(nl, sl, [])))是有问题的字符串):

fun solve (nl::nls, sl) = let

fun solveAux ([], sl, cnll) = cnll
  | solveAux (nl::nls, sl, cnll) = List.concat(map(fn cnl => solveAux(nls, sl, match(nl, sl, cnl))) cnll)

in
    show(solveAux(nls, sl, match(nl, sl, [])))
end;

我认为这应该可以解决问题:

fun solve (nl::nls, sl) = 

let

  val writestream = TextIO.openAppend "test.txt";

  fun solveAux ([], sl, cnll) = cnll
    | solveAux (nl::nls, sl, cnll) = List.concat(map(fn cnl => solveAux(nls, sl, match(nl, sl, cnl))) cnll)

in

  TextIO.output (writestream, show(solveAux(nls, sl, match(nl, sl, []))))
  TextIO.closeOut writestream;

end

但显然不是......

1 个答案:

答案 0 :(得分:2)

您可以使用TextIO结构写入文件。

openAppend允许您以追加模式打开文件,允许您在文件已存在时将行附加到文件,或者如果不存在则创建文件。此函数为您提供可与其他IO函数一起使用的输出流。

output函数允许您写入输出流。例如:

TextIO.output(yourStream, "This is a message to write to your stream.");

注意,在确定数据实际写入磁盘上的文件之前,您需要记住流flushclose。在您执行其中之一之前,编译器可能会选择延迟将数据写入磁盘,以加快执行速度。