【问题标题】:How do you make the output of a `readfile` function into source for conduit?如何将“readfile”函数的输出转换为管道的源代码?
【发布时间】:2016-08-10 03:10:59
【问题描述】:

我正在通过以下方式打开一些 .txt 文件:

main :: IO ()
main = do
  xxs  <- TIO.readFile pathToFile
  return ()

.txt 文件的格式为

str_1 \n str_2 \n ... str_m

我想将 xxs 制作成一个源代码,这样它可能看起来像:

sourceList [str_1, str_2, ..., str_m]

管道 API 是否提供了一种无需先对xxs 进行字符串操作的方法,从而使其成为[str_1, str_2, ..., str_m] 的形式?

【问题讨论】:

  • 使用linesxxs 分解为行列表怎么样?见Breaking into lines and words
  • 您是仅使用“管道”寻找答案,还是像标签暗示的那样,您是否也使用“管道”来寻找答案?
  • 如果 TIO 指的是 Data.Text.Lazy.IO,那么是的。如果TIO 指的是Data.Text.IO,那么readFile 会将整个文件读入内存。在任何一种情况下,lines 仍然会延迟构建行列表,这将允许一次只有一行驻留在内存中。
  • 也许您正在寻找来自 Data.Conduit.Text 的lineshackage.haskell.org/package/conduit-1.0.2/docs/…
  • 为什么要把它做成一个列表?只需编写您赢得的管道函数即可在没有内存泄漏的情况下对其进行流式传输:stackoverflow.com/a/38864188/1651941

标签: haskell conduit haskell-pipes


【解决方案1】:

如何将readfile 函数的输出转换为管道的源?

读取文件的源函数已经存在于包conduit-extra中,形式为sourceFile。您还可以在该模块中看到各种其他组合符,例如 conduitFile 等。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 2021-10-22
    • 2013-02-24
    • 1970-01-01
    • 2020-12-20
    相关资源
    最近更新 更多