将CSV标头解析为解析器列表

时间:2014-08-31 10:06:05

标签: parsing haskell attoparsec

我想解析第一行的CSV文件并获得解析器列表,并且失败了。

经过一些简化后,我得到的代码我认为应该有效,但事实并非如此,我不明白为什么。

这是:

{-# LANGUAGE OverloadedStrings #-}
import Data.Text
import Data.Attoparsec.Text
import Control.Applicative

doTestSep :: [String] -> Parser [String]
doTestSep t = do
      (endOfLine >> return t)
  <|> (char ';'  *> doTestParse t)

doTestParse :: [String] -> Parser [String]
doTestParse t = do
      (string "<FIELD1>" *> doTestSep ("field1" : t))
  <|> (string "<FIELD2>" *> doTestSep ("field2" : t))

test = parseOnly (doTestParse []) "<FIELD1>"

我打电话给test,希望得到类似

的内容
> Right ["field1"]

但我得到了

> Left "Failed reading: takeWith"

我做错了什么?

1 个答案:

答案 0 :(得分:0)

问题输入错误:我的标题行肯定会有\n\r\nendOfLine会抓住,我的示例输入没有\n在它。

工作版本是

test = parseOnly (doTestParse []) "<FIELD1>\n"