Мне нужна помощь, анализирующая список целых чисел с разделителями-запятыми из файла, когда список целых чисел может быть любой длины. Строка может выглядеть как «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-файлом.
Вы должны смотреть на 'sepBy *' комбинаторы, вы можете получить что-то вроде '' 'commaSepInts = десятичное' sepBy1' (полукокса '') '' '; '' 'row = commaSepInts' sepBy1' (char ':') '' '. Не уверен, что это решает все ваши проблемы, но 'sepBy' - это, вероятно, то, что вы ищете. – bheklilr
@bheklilr Спасибо, bheklilr, sepBy действительно был решением. – user3638162