如何将列表写入文件?

5

我正在尝试:

import System.IO
saveArr = do
    outh <- openFile "test.txt" WriteMode
    hPutStrLn outh [1,2,3]
    hClose outh

但它不起作用... 输出:

从文字“1”中没有实例(Num Char)

编辑 好的,hPrint可以使用整数,但是对于数组中的浮点数呢?[1.0, 2.0, 3.0]

3个回答

9

hPutStrLn只能打印字符串。也许你想用hPrint

hPrint outh [1,2,3]

还有一个问题:如果有浮点数呢?[1.2, 2.0, 3.0] - MMM
@MMM: 同理,hPrint 可以打印任何 Show 实例。 - kennytm

2

程序员可以想象出数组、列表和字符串,它们也是某些语言中的术语。

文件是一系列字节,因此当您想要向其写入内容时,应该将想象中的字符串/列表/数组编码为字节序列(通过showStorable等方式)。
同样,终端是一个字节序列,它是显示某些内容所需的操作的编码表示。

您有许多编码方式。您可以通过foldr (\a b -> a (',' : b)) "\n" (map shows [1,2,3])创建数组的CSV表示,或者您可能想要使用show [1,2,3]进行打印。


对我来说,hPutStrLn stdout (show [1,2,3]) 给出了正确的结果。请检查您是否使用了 show 而不是 shows,并且您是否从 Text.Show 模块中使用它。 - ony

1

为您的类型派生二进制,然后使用 Data.Binary 包中的 'encodeFile' 以二进制形式写入数据。这类似于将数据写出为字节串。


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