问题
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