2010-05-24 119 views
4

我想:如何将文件写入文件?

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

,但它不工作...输出:

从字面'1' 所引起的任何实例(数字字符)

编辑hPrint适用于整数,但浮点数在数组呢? [1.0, 2.0, 3.0]

回答

7

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

hPrint outh [1,2,3] 
+0

还有一个问题:如果有浮点数呢? '[1.2,2.0,3.0]'? – MMM 2010-05-24 11:26:10

+0

@MMM:相同。 'hPrint'可以打印任何Show实例。 – kennytm 2010-05-24 11:47:45

2

数组,列表和字符串只存在于程序员的想象和某些语言的术语中。

文件是一个字节序列,所以当你想写一些东西给它时,你应该将这个虚构的字符串/列表/数组编码成字节序列(由showStorable等等)。
终端也是一个字节序列,它是对用户显示某些内容所需的操作的编码表示形式。

你有很多种编码方式。你可以让数组的CSV表示由foldr (\a b -> a (',' : b)) "\n" (map shows [1,2,3])或者你可能想打印出来show [1,2,3]

+0

我试过显示,不工作:( – MMM 2010-05-24 09:01:44

+0

对我来说'hPutStrLn stdout(show [1,2,3])'给出了正确的结果。检查你使用'show',而不是'shows',并且你使用它'Text.Show'模块。 – ony 2010-05-24 09:22:20

1

得出的二进制你的类型,然后使用“encodeFile”从Data.Binary包写binnary形式的数据。这与将数据作为字节串写出相似。