如何从 Haskell 中的字符串解析整数
How to parse ints out of string in Haskell
我正在尝试解析以下格式的字符串:
(x,y) (r,g,b)
我的文件每一行都包含这种字符串。
我已经提取了线条,现在我想提取它的值,但我找不到令人满意的东西。
我想做类似的事情:
case str of
['(', x, ',', y, ')', ' ', '(', r, ',', g, ',', b, ')'] -> The rest
我知道它不起作用,我是 Haskell 的新手,所以我一直遇到我不明白的错误。
我怎样才能做到?
编辑:
我以前创建过这个,但是我不知道一旦创建了变量如何真正使用它:
data Points = Point Coords Colors
data Colors = Color Float Float Float
data Coords = Coord Int Int
数字不限一位数,r,g,b取值范围为0~255
这项特定任务的简单技巧:
data Pix = Pix (Int,Int) (Int,Int,Int)
deriving (Read, Show)
parsePix :: ReadS Pix
parsePix s = reads $ "Pix "++s
*Main> parsePix "(1,2) (3,4,5)"<br>[(Pix (1,2) (3,4,5),"")]
一般来说,您应该查看适当的解析器组合器库,但我建议 megaparsec。
我正在尝试解析以下格式的字符串:
(x,y) (r,g,b)
我的文件每一行都包含这种字符串。 我已经提取了线条,现在我想提取它的值,但我找不到令人满意的东西。 我想做类似的事情:
case str of
['(', x, ',', y, ')', ' ', '(', r, ',', g, ',', b, ')'] -> The rest
我知道它不起作用,我是 Haskell 的新手,所以我一直遇到我不明白的错误。 我怎样才能做到?
编辑: 我以前创建过这个,但是我不知道一旦创建了变量如何真正使用它:
data Points = Point Coords Colors
data Colors = Color Float Float Float
data Coords = Coord Int Int
数字不限一位数,r,g,b取值范围为0~255
这项特定任务的简单技巧:
data Pix = Pix (Int,Int) (Int,Int,Int)
deriving (Read, Show)
parsePix :: ReadS Pix
parsePix s = reads $ "Pix "++s
*Main> parsePix "(1,2) (3,4,5)"<br>[(Pix (1,2) (3,4,5),"")]
一般来说,您应该查看适当的解析器组合器库,但我建议 megaparsec。