逐行读取文件

时间:2012-09-05 19:19:53

标签: haskell

我正在尝试逐行读取文件,但是当我到达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 个答案:

答案 0 :(得分:15)

还有一个解决方案。您可以使用readFile延迟读取文件,根据需要对其进行惰性拆分并逐行获取结果:

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

答案 1 :(得分:7)

您正在寻找的是,hIsEOF

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

答案 2 :(得分:7)

您可以在阅读一行之前使用hIsEOF手动检查EOF状态,也可以使用随时可用的(懒惰)readFile功能。

答案 3 :(得分:4)

在进一步阅读之前,您可以使用hIsEOF测试手柄x。当读取行的第一个字符

时遇到文件结尾时,hGetLine失败