2012-09-05 43 views
7

Tôi đang cố gắng đọc từng dòng tệp, nhưng tôi không biết cách dừng lại khi tôi đạt đến EOF.Đọc một dòng tệp theo dòng

tôi có mã này:

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

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

và nó rõ ràng là luôn terminata nâng cao một ngoại lệ.

Tôi có thể giải quyết bằng cách nào?

Edit: thông báo lỗi chính xác là:

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

Thông báo lỗi chính xác là gì? – huon

Trả lời

6

Bạn có thể sử dụng hIsEOF để kiểm tra tình trạng EOF bằng tay trước khi đọc một hoặc bạn chỉ có thể sử dụng chức năng sẵn có (lười) readFile.

4

Bạn có thể kiểm tra tay cầm x với hIsEOF trước khi đọc thêm. hGetLine không thành công khi kết thúc tệp gặp phải khi đọc ký tự đầu tiên của dòng

13

Một giải pháp khác. Bạn có thể đọc tập tin lười biếng với số readFile, chia nhỏ theo yêu cầu và lấy kết quả theo dòng:

readLines :: FilePath -> IO [String] 
readLines = fmap lines . readFile 
Các vấn đề liên quan