0

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"

私は何を間違っていますか?

4

1 に答える 1

0

問題は間違った入力です: 私のタイトル行には間違いなく\nまたは\r\nがあり、これは によってキャッチされますがendOfLine、私の入力例には含まれていませんでし\nた。

作業バージョンは

test = parseOnly (doTestParse []) "<FIELD1>\n"
于 2014-08-31T17:18:08.180 に答える