Haskell的全功能CSV解析器?

Haskell的全功能CSV解析器?,haskell,csv,Haskell,Csv,任何人都可以推荐一种解析CSV文件的方法,并提供以下选项: 设置单元格/字段分隔符 设置记录结束/行终止符 设置字段的引号字符 支持UTF-8字符串 能够将内存中的CSV结构写回文件 我确实尝试过Text.CSV,但它非常简单,并且缺少上述大部分功能。 是否有更高级的CSV解析模块,或者我是否必须“从头开始”编写它,即使用Text.parsercompbinators?我不打算重新发明轮子 小心。我不能推荐一个现成的、打包好的Haskell CSV解析器,但我记得书中有一章,作者通过创建CS

任何人都可以推荐一种解析CSV文件的方法,并提供以下选项:

  • 设置单元格/字段分隔符
  • 设置记录结束/行终止符
  • 设置字段的引号字符
  • 支持UTF-8字符串
  • 能够将内存中的CSV结构写回文件
我确实尝试过Text.CSV,但它非常简单,并且缺少上述大部分功能。 是否有更高级的CSV解析模块,或者我是否必须“从头开始”编写它,即使用Text.parsercompbinators?我不打算重新发明轮子


小心。

我不能推荐一个现成的、打包好的Haskell CSV解析器,但我记得书中有一章,作者通过创建CSV解析器来演示


有关资料可在网上查阅;检查标题为“扩展示例:完整CSV解析器”的部分。

快速搜索查找,它确实有可自定义的引号和分隔符。

这是一个旧线程,但两者都有,如果不是全部的话,也有大部分您要查找的功能(不确定是否要重新写入文件)。

这是一个黑客攻击。如果您的发行版没有提供软件包,您可以通过cabal安装,例如

$ cabal install cassava
它可以从CSV文件读取和写入(即解码/编码)记录

可以按如下方式设置字段分隔符:

import Data.Csv
import Data.Char -- ord
import qualified Data.ByteString.Lazy.Char8 as B

enc_opts = defaultEncodeOptions {
  encDelimiter = fromIntegral $ ord '\t'
}

write_csv vector = do
  B.putStr $ encodeWith enc_opts vector

目前,
Data.Csv
不提供其他编码/解码选项。有用于处理标题行的函数变体。按原样,行以CRLF终止,双引号用于引用,并假定为文本编码UTF8。值中的双引号用反斜杠引用,在“不必要”的地方省略引号。

木薯在内存中工作,是非常简单的库,例如

encode [("John" :: Text, 27), ("Jane", 28)]
"John,27\r\nJane,28\r\n"

我认为仍然缺乏良好的csv库:
电子表格
使用字符串,而
csv bytestring
不允许指定分隔符