Haskell使用Attoparsec解析整数列表
当整数列表可以是任意长度时,我需要从文件中解析逗号分隔的整数列表的帮助。字符串可能看起来像“1,2,3,4,5,6,7,8,…”,我需要的列表可能像[1,2,3,4,5,6,7,8,…] 文件格式如下所示:Haskell使用Attoparsec解析整数列表,haskell,attoparsec,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 : ... 我的解析器目前只读取一个整数,但它需要开始
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
parseTile::Parser Tile
parseTile=do
x您可以使用sebby
和decimal
:
parseTile :: Parser Tile
parseTile = do
x <- decimal
char ','
y <- decimal
char ':'
t <- decimal `sepBy` (char ',')
char ';'
return $ Tile x y t
parseTile::Parser Tile
parseTile=do
x您可以使用sebby
和decimal
:
parseTile :: Parser Tile
parseTile = do
x <- decimal
char ','
y <- decimal
char ':'
t <- decimal `sepBy` (char ',')
char ';'
return $ Tile x y t
parseTile::Parser Tile
parseTile=do
x您应该查看sebby*
组合符,您可以得到类似于commaSepInts=decimal`sebby1`(char',')
row=commaSepInts`sepBy1`(char':')
。不确定这是否解决了您的所有问题,但您可能正在寻找sebby
。@bheklillr谢谢bheklillr,sebby确实是解决方案。您应该看看sebby*
组合符,您可以得到类似于commaSepInts=decimal`sebby1`(char',')
row=commaSepInts`sepBy1`(char':')
。不确定这是否解决了您的所有问题,但sebby
可能是您正在寻找的。@bheklillr谢谢bheklillr,sebby确实是解决方案。谢谢。我知道必须有一个简单的答案,但我无法确定。谢谢。我知道必须有一个简单的答案,但我无法确定。