2012-09-05 17 views
7

Sto provando a leggere un file riga per riga, ma non so come smettere quando raggiungo l'EOF.Leggere un file riga per riga

ho questo codice:

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

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

ed è ovviamente terminata sempre sollevare un'eccezione.

Come posso risolvere?

Edit: messaggio di errore esatto è:

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

Qual è il messaggio di errore esatto? – huon

risposta

6

È possibile utilizzare hIsEOF per verificare lo stato EOF manualmente prima di leggere un linea, oppure puoi semplicemente utilizzare la funzione readFile prontamente disponibile (lazy).

4

Prima di leggere ulteriormente, è possibile testare la maniglia x con hIsEOF. hGetLine fallisce quando si incontra la fine del file durante la lettura del primo carattere della riga

13

Un'altra soluzione. È possibile file di lettura pigra con readFile, diviso pigro on-demand e prendere la linea risultato per riga:

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