2012-09-05 2 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

정확한 오류 메시지가 무엇 : 당신은 readFile와 게으른 읽기 파일, 게으른 분할이 온 디맨드 및 선으로 결과 행을 할 수 있습니까? – huon

답변

6
당신은 EOF 상태를 확인하는 hIsEOF을 사용할 수 있습니다

수동 전에 읽기 또는 쉽게 사용할 수있는 (게으른) readFile 기능을 사용할 수 있습니다.

4

더 읽기 전에 핸들 x를 hIsEOF으로 테스트 할 수 있습니다. 줄의 첫 번째 문자를 읽을 때 파일 끝에 도달하면 hGetLine이 실패합니다.

13

한 가지 해결 방법이 있습니다.

readLines :: FilePath -> IO [String] 
readLines = fmap lines . readFile 
관련 문제