真实世界Haskell的CSV Parser实现

Dav*_*ked 2 csv parsing haskell

Goerzen等人提出了一个简单的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
Run Code Online (Sandbox Code Playgroud)

代码按预期运行,但我不明白在最后一行传递字符串"(unknown)"参数的目的.这是一些我不知道的成语吗?

Car*_*ten 5

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

这是SourcePos你在Parsec中得到许多东西的一部分- 例如ParseError你在错误案例中得到的东西.

您可能希望有类似"x行/列y上的文件SourceName中的错误";)

从你自己的计算中你可以得到它getPosition(它SourcePos再次给你一个- 从那里你可以sourceName用来获取这个参数)