2014-12-30 46 views
0

當整數列表可以是任意長度時,我需要一些幫助來解析文件中逗號分隔整數的列表。該字符串可能看起來像「1,2,3,4,5,6,7,8,...」,我需要的列表將會像[1,2,3,4,5,6,7, 8,...]。Haskell使用Attoparsec解析整數列表

文件格式如下:

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到所有的數字讀入一個字節串,但後來我不得不解析與不知道確切的同樣的問題又串多少個號碼可以有:

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文件。

+0

你應該看看'sepBy *'組合程序,你可以得到類似'''commaSepInts =小數'sepBy1'(字符 '')'' '; '''row = commaSepInts'sepBy1'(char':')'''。不知道這是否解決了所有問題,但「sepBy」可能就是您要找的。 – bheklilr

+0

@bheklilr感謝bheklilr,sepBy的確是解決方案。 – user3638162

回答

3

您可以使用sepBydecimal

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

謝謝。我知道必須有一個簡單的答案,但我不能把它放在手上。 – user3638162