如何使用Erlang创建带有换行符的文本文件?

3

有人知道在Erlang语言中如何向文本文件中添加新行吗?我想保存这个列表:

Data = ["one", "two", "three"],

将内容写入新行的文本文件中:

one
two
three

我尝试过:

write() ->
    Data = ["1","2","3"],
    Print = string:join(Data, "\n"),
    file:write_file("/Documents/foo.txt", [Print]).

但它创建了一个包含内联数据的文本文件:

one\ntwo\nthree
2个回答

6
我猜你是在Windows上运行代码,所以需要使用"\r\n"作为换行符。你可以通过调用io_lib:nl/0来获取适合你所在平台的换行符。
请尝试以下代码:
write() ->
    Data = ["1","2","3"],
    LineSep = io_lib:nl(),
    Print = [string:join(Data, LineSep), LineSep],
    file:write_file("/Documents/foo.txt", Print).

在这里,Print 是一个 iodata 的实例,它可以是 iolist 或者 binary。其中,iolist 是一个任意深度的列表,由一个或多个字符、二进制或其它 iolists 组成。对于 Erlang 中的输出来说,这是一种非常方便的数据类型,因为它意味着您可以避免在将数据写入文件或通过套接字发送之前对其进行扁平化处理。这个版本的 write 函数使用了 iodata 形式的 Print 变量,以便轻松地确保写入文件的最后一行数据后面跟着一个换行符,这是 string:join/2 本身无法做到的。


非常感谢,这正是我所需要的! - Valeria Khusnulina

0

试试这个:

write() ->
    Data = ["1","2","3"],
    Print = string:join(Data, "\n"),
    file:write_file("/Documents/foo.txt", Print).

1
这段代码的结果将与原帖完全相同。 - Steve Vinoski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接