香港專業教育學院一直與這個頁面 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