真实世界Haskell的CSV解析器实现

时间:2016-04-12 04:09:32

标签: parsing csv haskell

Goerzen等人present一个简单的CSV文件解析器实现,可以向读者介绍 Real World Haskell 关于Parsec解析组合库的信​​息。

这是他们简洁程序的一个版本:

import Text.ParserCombinators.Parsec

csvFile = endBy line eol
line = sepBy cell (char ',')
cell = many (noneOf ",\n")
eol = char '\n'

parseCSV :: String -> Either ParseError [[String]]
parseCSV input = parse csvFile "(unknown)" input

代码按预期运行,但我不理解传递字符串的目的"(未知)"最后一行的论点。这是一些我不知道的成语吗?

1 个答案:

答案 0 :(得分:5)

它是SourceName - 它曾用于在错误情况下为您提供更好的表示。

Parsec 中您将获得许多内容的SourcePos的一部分 - 例如您在错误案例中获得的ParseError

您可能希望在第x行/第y行"文件SourceName中出现"错误; ;)

从您自己的计算中,您可以使用getPosition(再次为您提供SourcePos - 从中​​可以使用sourceName来获取此参数)