【问题标题】:How to write list to file?如何将列表写入文件?
【发布时间】:2011-02-23 03:45:23
【问题描述】:

我正在尝试:

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

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

没有由文字 `1' 产生的 (Num Char) 实例

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

【问题讨论】:

    标签: list haskell io


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      数组、列表和字符串仅存在于程序员的想象中,并且在某些语言中是一个术语。

      文件是一个字节序列,因此当您想向其写入内容时,您应该将该虚构的字符串/列表/数组编码为字节序列(通过show 或来自Storable 等)。
      终端也是一个字节序列,它是向用户显示某些内容所需的操作的编码表示。

      您有多种编码方式。您可以通过foldr (\a b -&gt; a (',' : b)) "\n" (map shows [1,2,3]) 对数组进行CSV 表示,或者您可能想打印它show [1,2,3]

      【讨论】:

      • 对我来说hPutStrLn stdout (show [1,2,3]) 给出了正确的结果。检查您使用的是show,而不是shows,并且您使用的是Text.Show 模块。
      【解决方案3】:

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

      hPrint outh [1,2,3]
      

      【讨论】:

      • 还有一个问题:如果有浮点数怎么办? [1.2, 2.0, 3.0] ?
      • @MMM:一样。 hPrint 可以打印任何 Show 实例。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-04-20
      • 2014-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多