2012-09-05 194 views
7

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

我有这样的代码:

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

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

,它显然一直terminata引发异常。

我该如何解决?

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

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

什么是确切的错误消息? – huon

回答

6

您可以使用hIsEOF检查EOF状态之前手动阅读行,或者你可以使用现成的(懒惰)readFile函数。

4

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

13

另一个解决方案。您可以使用readFile惰性读取文件,将它按需分割并逐行取出结果:

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