逐行读取文件

Asl*_*986 7 haskell

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

我有这个代码:

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

readALine x = do y <- hGetLine x
                 print y
                 readALine x
Run Code Online (Sandbox Code Playgroud)

它显然总是终止提出异常.

我怎么解决?

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

*** Exception: example.txt: hGetLine: end of file
Run Code Online (Sandbox Code Playgroud)

Fed*_*lev 16

还有一个解决方案 你可以懒惰读取文件readFile,懒惰按需分割并逐行获取结果:

readLines :: FilePath -> IO [String]
readLines = fmap lines . readFile
Run Code Online (Sandbox Code Playgroud)


ver*_*esj 8

您正在寻找的是,hIsEOF

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


Nik*_* B. 8

您可以hIsEOF在读取行之前手动检查EOF状态,也可以使用现成(懒惰)readFile功能.