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
代码按预期运行,但我不理解传递字符串的目的"(未知)"最后一行的论点。这是一些我不知道的成语吗?
答案 0 :(得分:5)
它是SourceName
- 它曾用于在错误情况下为您提供更好的表示。
Parsec 中您将获得许多内容的SourcePos
的一部分 - 例如您在错误案例中获得的ParseError
。
您可能希望在第x行/第y行"文件SourceName中出现"错误; ;)
从您自己的计算中,您可以使用getPosition
(再次为您提供SourcePos
- 从中可以使用sourceName
来获取此参数)