0

このコードは、数字 (例: "1243\t343\n") が存在する場合にのみ機能します。

tabFile = endBy line eol
line = sepBy cell (many1 tab)
cell = integer
eol = char '\n'

integer = rd <$> many digit
  where rd = read :: String -> Int

"abcd\tefg\n1243\t343\n"その部分を無視するように解析する方法はあり"abcd\tefg\n"ますか?

4

2 に答える 2

1

そのため、整数を変更して単純に文字をスキップするのがコツです。

integer :: Parser Int
integer =
  many letter *>
  ((read . concat) <$> many digit `sepBy` many1 letter)
  <* many letter

これは12a34正しく処理されます。それ以外の場合は、次のように簡単です

 many letter *> (read <$> many digit) <* many letter
于 2013-10-06T20:41:15.877 に答える
1

skipManyを使用して、数字以外のすべてをスキップできます。次のようなもの:

many (skipMany (noneOf ['0'..'9']) >> digit)

または(実際に必要なものに応じて)

skipMany (noneOf ['0'..'9']) >> many digit
于 2013-10-06T20:40:19.283 に答える