Read a file line by line

耗尽温柔 提交于 2020-01-23 06:11:04

问题


I'm trying to read a file line by line, but I don't know how to stop when I reach the EOF.

I have this code:

readWholeFile = do inputFile <- openFile "example.txt" ReadMode
                readALine inputFile

readALine x = do y <- hGetLine x
                 print y
                 readALine x

and it obviously always terminata raising an exception.

How can I solve?

Edit: exact error message is:

*** Exception: example.txt: hGetLine: end of file

回答1:


What you are looking for is, hIsEOF

Check out http://book.realworldhaskell.org/read/io.html




回答2:


One more solution. You can lazy read file with readFile, lazy split it on-demand and take result line by line:

readLines :: FilePath -> IO [String]
readLines = fmap lines . readFile



回答3:


You can use hIsEOF to check the EOF status manually before reading a line, or you can just use the readily available (lazy) readFile function.




回答4:


You can test the handle x with hIsEOF before reading further. hGetLine fails when the end of file is encountered when reading the first character of the line



来源:https://stackoverflow.com/questions/12288318/read-a-file-line-by-line

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!