0
我想解析CSV文件的第一行,並得到解析器列表,結果失敗。將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"
我在做什麼錯?
對於文檔'endOfLine'說:「比賽一個單一的換行符‘\ n’或回車跟一個換行符‘\ r \ n’。」 。但是,您的輸入不包含「\ n」或「\ r \ n」,以便解析器將失敗。 – bennofs 2014-08-31 10:33:36
@bennofs謝謝你,你是對的。它有效,我的問題是一個盲人問題。 – 2014-08-31 10:44:34
請注意,根據您的喜好,Haskell有幾個優秀的CSV庫,而Real World Haskell有一節介紹如何使用parsec編寫一個CSV解析器,如果您想要自己製作一個CSV解析器,您可以尋找靈感。 – AndrewC 2014-08-31 17:10:18