[英]Haskell command system parser
我已经编写了从命令行[ps auxww | ./myparser]并解析ps命令的输出,以便将其插入到我创建的过程数据结构中。 我成功解析了结果String的一行,但是现在我陷入了试图解析整个字符串并返回[Process]而不是单个Process的困境。 问题是如何实现parsePS。 它必须多次调用myParser才能解析每一行并返回Process列表并将其打印到终端中。 有人能帮我吗?
我不确定是什么让您失望,但我想间隔会杀死您。 如果是这样,我有两个想法可能会有所帮助。
修改myParser
以在末尾占用空间,并且many
combinator应该起作用。
myParser = do
...
spaces
command <- pCommand
spaces -- CONSUME END OF LINE
return Entry{ ... }
然后, many myParser
应该工作。
或者,您可以先将输入分成几行,然后分别对它们进行解析。
argLines <- fmap lines getContents
(我认为您的意思是在hGetContents
之前通过getLine
刻录第一行?)
在我看来,您正在寻找一种顺序解析每一行并返回解析结果列表的方法。 前奏中的mapM怎么样?
如果是myParser :: String -> Parser Process
,则mapM myParser :: [String] -> Parser [Process]
似乎就是您要寻找的内容(对Parsec
的Parser类型使用通用名称)。 因此,如果您有要顺序解析的行列表(称为lns
),则可以使用parse (mapM myParser) lns
获得所需的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.