8

我正在尝试逐行读取文件,但是当我到达 EOF 时,我不知道如何停止。

我有这个代码:

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

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

它显然总是终止引发异常。

我该如何解决?

编辑:确切的错误信息是:

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

4 回答 4

19

另一种解决方案。您可以使用 延迟读取文件readFile,按需延迟拆分并逐行获取结果:

readLines :: FilePath -> IO [String]
readLines = fmap lines . readFile
于 2012-09-05T19:32:52.167 回答
8

您正在寻找的是,hIsEOF

查看http://book.realworldhaskell.org/read/io.html

于 2012-09-05T19:29:22.297 回答
8

您可以hIsEOF在读取一行之前手动检查 EOF 状态,或者您可以只使用现成的(惰性)readFile功能。

于 2012-09-05T19:30:08.520 回答
4

在进一步阅读之前,您可以使用 x 来测试句柄hIsEOF。读取行的第一个字符时遇到文件结尾时,hGetLine 失败

于 2012-09-05T19:30:20.830 回答