Tôi đang cố gắng sửa đổi tệp PostScript lớn trong Scala (một số có kích thước 1GB). Các tập tin là một nhóm các lô, mỗi lô có chứa mã đại diện cho số lô, số lượng trang vvSửa đổi một tệp lớn trong Scala
tôi cần phải:
- Tìm kiếm các tập tin cho các mã hàng loạt (mà luôn luôn bắt đầu bằng cùng một dòng trong tệp)
- Đếm số trang cho đến khi mã hàng loạt tiếp theo
- Sửa đổi mã lô để bao gồm số lượng trang trong mỗi lô.
- Lưu tệp mới ở một vị trí khác.
Giải pháp hiện tại của tôi sử dụng hai trình lặp (iterA
và iterB
), được tạo từ Source.fromFile("file.ps").getLines
. Trình lặp đầu tiên (iterA
) truyền tải trong một vòng lặp while đến đầu của một mã lô (với số iterB.next
cũng được gọi mỗi lần). iterB
sau đó tiếp tục tìm kiếm cho đến khi mã hàng loạt tiếp theo (hoặc kết thúc của tệp), đếm số trang nó vượt qua khi nó đi. Sau đó, nó cập nhật mã lô tại vị trí của iterA
, một quá trình lặp lại.
Điều này có vẻ rất không giống với Scala và tôi vẫn chưa thiết kế một cách hay để lưu các thay đổi này vào một tệp mới.
Cách tiếp cận tốt cho vấn đề này là gì? Tôi có nên bỏ qua trình vòng lặp hoàn toàn không? Tôi muốn làm điều đó mà không cần phải có toàn bộ đầu vào hoặc đầu ra vào bộ nhớ cùng một lúc.
Cảm ơn!
Tôi đoán giải pháp này sẽ giữ toàn bộ tệp trong bộ nhớ vì trên mẫu 2.9.x này 'Source.fromFile (" in.ps "). getLines.toStream' giữ trên đầu luồng. Xem http://stackoverflow.com/a/8640680/257449 và https://issues.scala-lang.org/browse/SI-4835. – huynhjl
huynhjl, tôi đã cập nhật mẫu mã để sửa lỗi (gây phiền nhiễu) mà bạn đã tìm thấy. – stephenjudkins