我想修改Scala中的大PostScript文件(有些大小大到1GB)。該文件是一組批次,用含有一個表示批號,頁數一個代碼等修改Scala中的大文件
我需要每批:
- 搜索批處理碼的文件(其總是以文件中的同一行開始)
- 計算直到下一個批次代碼的頁數
- 修改批次代碼以包括每批次中的頁數。
- 將新文件保存在其他位置。
我當前的解決方案使用兩個迭代(iterA
iterB
和),從Source.fromFile("file.ps").getLines
創建。第一個迭代器(iterA
)在while循環中遍歷批處理代碼的開頭(每次都調用iterB.next
)。 iterB
然後繼續搜索,直到下一個批處理代碼(或文件的結尾),計算它在通過時所經過的頁數。然後,它在iterA
的位置更新批次代碼,該過程重複進行。
這看起來非常不像Scala一樣,我仍然沒有設計一種將這些更改保存到新文件的好方法。
什麼是解決此問題的好方法?我應該完全拋棄迭代器嗎?我最好喜歡這樣做,而不必將整個輸入或輸出一次寫入內存。
謝謝!
我的猜測是這個解決方案將保存整個文件在內存中,因爲在2.9.x這個模式'Source.fromFile(「in。ps「)。getLines.toStream'保持流的頭部。請參閱http://stackoverflow.com/a/8640680/257449和https://issues.scala-lang.org/browse/SI-4835。 – huynhjl 2012-02-17 06:59:43
huynhjl,我已更新代碼示例以修復您找到的(煩人)錯誤。謝謝。 – stephenjudkins 2012-02-17 22:32:45