香港专业教育学院一直与这个页面 http://book.realworldhaskell.org/read/using-parsec.html ,我试图让一个CSV文件解析器的工作,但我注意到,哈斯克尔秒差距的功能
parse csvFile "(stdin)" str
总是返回
Right [["s","o"],["h","i"]]
是有一种方法来解析,工作在哪里它只返回我可以在我的代码中稍后使用的数组数组?
如代码:
main = mainLoop []
mainLoop :: [[String]] -> IO()
mainLoop db = do
answer <- getLine
case words answer of
("load":x) -> do
str <- readFile (head x)
mainLoop $ parseCSV str
("quit":_) -> return()
("help":_) -> do
putStrLn "This is your help"
mainLoop db
otherwise -> putStrLn "Not sure what you want me to do! :(" >> mainLoop db
csvFile = endBy line eol
line = sepBy cell (char ',')
cell = many (noneOf ",\n")
eol = char '\n'
parseCSV :: String -> Either ParseError [[String]]
parseCSV input = parse csvFile "(unknown)" input
谢谢
但是,你将如何做错误处理?如果输入无法解析,那么你的程序崩溃了吗? – hugomg
你知道你可以将这个值'Right [[...],[]]'转换成列表清单:'[[...],[......]] - 你不是吗? ?你可以使用[或](http://hackage.haskell.org/packages/archive/base/latest/doc/html/Prelude.html#v:either)funciton,如果你想要'(错误。显示)编号(parseCSV输入)' –
我不知道,谢谢:)我得到它的工作。 – DustBunny