Tôi có lẽ chỉ dành một ngày của thời gian tính toán một cách vô ích :)Có cách nào để 'đọc' lười biếng không?
Vấn đề là I (ngây thơ) viết về 3.5GB của (nén) [(Text, HashMap Text Int)]
dữ liệu vào một tập tin và tại thời điểm đó chương trình của tôi bị rơi. Tất nhiên không có ]
cuối cùng ở cuối dữ liệu và kích thước tuyệt đối của nó làm cho việc chỉnh sửa nó bằng tay không thể.
Dữ liệu được định dạng qua Prelude.show
và ngay tại thời điểm này tôi nhận thấy rằng Prelude.read
sẽ cần toàn bộ tập dữ liệu vào bộ nhớ (không thể) trước khi dữ liệu được trả về.
Bây giờ ... có cách nào để khôi phục dữ liệu mà không cần phải viết một trình phân tích cú pháp theo cách thủ công không?
Cập nhật 1
main = do
s <- getContents
let hs = read s :: [(String, M.Map String Integer)]
print $ head hs
này tôi đã cố gắng ... nhưng nó chỉ giữ tốn nhiều bộ nhớ hơn cho đến khi nó bị giết bởi hệ điều hành.
@ n.m. thậm chí sau đó 'read' sẽ cố gắng đọc mọi thứ vào bộ nhớ trước khi trả về một phần tử duy nhất trong danh sách. – fho
Xin lỗi tôi đã hiểu lầm, ý bạn là hàm Haskell 'read', không đọc từ tập tin. –