Haskell使用Attoparsec解析整数列表

时间:2014-12-30 19:21:59

标签: haskell attoparsec

当整数列表可以是任意长度时,我需要帮助解析文件中逗号分隔整数的列表。字符串可能看起来像“1,2,3,4,5,6,7,8,...”,我需要的列表就像[1,2,3,4,5,6,7, 8,...]。

文件格式如下:

0,0:1; -- minimum of 1 integer after the :
0,1:1,2;
0,2:5;
0,3:5,16,223,281; -- any amount of integers can follow the :
...

我的解析器目前只读取一个整数,但需要开始阅读更多。我可以使用takeTill将所有数字读入ByteString,但是我必须解析另一个字符串,同样的问题是不知道可以有多少数字:

parseTile :: Parser Tile
parseTile = do
  x <- decimal
  char ','
  y <- decimal
  char ':'
  --t <- takeTill (\x -> x == ';')
  t <- decimal
  char ';'
  return $ Tile x y t

我找到了this,但它对我没有帮助,因为我的文件不是json文件。

1 个答案:

答案 0 :(得分:3)

您可以使用sepBydecimal

parseTile :: Parser Tile
parseTile = do
  x <- decimal
  char ','
  y <- decimal
  char ':'
  t <- decimal `sepBy` (char ',')
  char ';'
  return $ Tile x y t