1

パーセクを使用してキーと値を含むファイルを解析するにはどうすればよい[[(String, String)]]ですか?

key1: value 1 key2: value 2
key1: value 1 key2: value 2
key1: value 1 key2: value 2

キーは1ワードで、値はさらにワードにすることができます。

私が試してみました

tag :: GenParser Char st Tag
tag = do
  name <- key
  value <- manyTill anyChar (try key)
  return (name, value)

key :: GenParser Char st String
key = do
  name <- many (noneOf ": ")
  char ':'
  return name

> parse (many tag) "" "key1: value 1 key2: value 2"
Right [("key1"," value 1 ")]
4

1 に答える 1

2

tag改行と次のキーの両方をテストするように関数を変更しましたが、それは私にとってはうまくいきます。

tag :: GenParser Char st Tag
tag = do
  name <- key
  value <- manyTill anyChar ((test newline) <|> (test key))
  return (name, strip value)

test :: GenParser Char st a -> GenParser Char st ()
test p = lookAhead $ try p >> return ()

key :: GenParser Char st String
key = do
  name <- many1 (noneOf ": \n\r")
  char ':'
  return name
于 2012-08-19T15:04:52.943 に答える