2012-09-05 35 views
7

Estoy tratando de leer un archivo línea por línea, pero no sé cómo detenerlo cuando llego al EOF.Lea un archivo línea por línea

tengo este código:

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

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

y es obvio que siempre terminata lanzar una excepción.

¿Cómo puedo resolverlo?

Editar: mensaje de error exacto es:

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

Cuál es el mensaje de error exacto? – huon

Respuesta

6

Puede utilizar hIsEOF para comprobar el estado EOF manualmente antes de leer una línea, o simplemente puede usar la función readFile fácilmente disponible (floja).

4

Puede probar la palanca x con hIsEOF antes de seguir leyendo. hGetLine falla cuando se encuentra el final del archivo al leer el primer carácter de la línea

13

Una solución más. Puede archivos de lectura perezoso con readFile, dividida perezoso que la carta y tomar la línea de resultado por la línea:

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