如何在Haskell中解析字符串中的整数

Osa*_*Osa 0 string parsing haskell point character

我正在尝试解析格式的字符串:

(x,y) (r,g,b)
Run Code Online (Sandbox Code Playgroud)

我的文件在每一行上都包含这种字符串。我已经提取了线条,现在我想提取其值,但找不到满意的东西。我想做类似的事情:

case str of
['(', x, ',', y, ')', ' ', '(', r, ',', g, ',', b, ')'] -> The rest
Run Code Online (Sandbox Code Playgroud)

我知道它不起作用,我是Haskell的新手,所以我一直遇到我不明白的错误。我该怎么做?

编辑:我之前已经创建了这个,但是一旦创建了变量,我不知道如何真正使用它:

data Points = Point Coords Colors
data Colors = Color Float Float Float
data Coords = Coord Int Int
Run Code Online (Sandbox Code Playgroud)

数字不限于一位,r,g和b的范围是0到255。

lef*_*out 5

An easy hack for this particular task:

data Pix = Pix (Int,Int) (Int,Int,Int)
 deriving (Read, Show)

parsePix :: ReadS Pix
parsePix s = reads $ "Pix "++s
Run Code Online (Sandbox Code Playgroud)
*Main> parsePix "(1,2) (3,4,5)"
[(Pix (1,2) (3,4,5),"")]
Run Code Online (Sandbox Code Playgroud)

In general, you should look into proper parser-combinator libraries though, I recommend megaparsec.

  • 像任何其他列表一样:通过模式匹配,可通过((Pix pt color,_):_)-> ...`等等.. (2认同)