Cod*_*ice 3 string parsing haskell
我是Haskell的新手,目前正在尝试解决需要进行字符串解析的问题.我的输入String包含以逗号分隔的引号中的单词列表.我想将这个单个字符串解析为字符串列表.我应该从哪里开始学习解析这样的String?是否有一个有用的partuclar模块和/或功能?
ps请不要发布完整的解决方案.我只是想要一个指向起始位置的指针,这样我就可以学习如何做到这一点.
最强大的解决方案是解析器组合器.Haskell有几个,但最重要的是我想到的:
解析器组合器的一大优点是,使用do符号(或Applicative样式,如果您愿意)定义解析器非常容易.
如果您只想要一些快速简单的字符串操作功能,那么请查阅text库(对于高性能字节编码的字符串),或Data.List(对于普通的列表编码字符串),它们提供了操作字符串所需的函数.
最终,我决定滚动自己的解析函数,因为这种情况很简单。自从我首次发布此问题并想在此处记录我的解决方案以来,我已经学到了很多有关Haskell的知识:
split :: Char -> String -> [String]
split _ "" = []
split c s = firstWord : (split c rest)
where firstWord = takeWhile (/=c) s
rest = drop (length firstWord + 1) s
removeChar :: Char -> String -> String
removeChar _ [] = []
removeChar ch (c:cs)
| c == ch = removeChar ch cs
| otherwise = c:(removeChar ch cs)
main = do
handle <- openFile "input/names.txt" ReadMode
contents <- hGetContents handle
let names = sort (map (removeChar '"') (split ',' contents))
print names
hClose handle
Run Code Online (Sandbox Code Playgroud)