스칼라에서 대형 포스트 스크립트 파일을 수정하려고합니다 (크기가 1GB 정도되는 파일도 있습니다). 이 파일에 등을 배치 번호, 페이지 수를 나타내는 코드, 내가 필요스칼라에서 대용량 파일 수정
를 포함하는 각 배치와 배치의 그룹 :
- 배치 코드의 파일 검색 (항상하는 파일에서 같은 줄로 시작하십시오.
- 다음 배치 코드까지 페이지 수를 계산하십시오.
- 각 배치에 페이지 수를 포함하도록 배치 코드를 수정하십시오.
- 새 파일을 다른 위치에 저장하십시오.
나의 현재 용액 Source.fromFile("file.ps").getLines
에서 만든 두 반복기 (iterA
및 iterB
)를 사용한다. 첫 번째 반복자 (iterA
)는 while 루프에서 배치 코드 시작 부분까지 이동합니다 (도 매번 호출됩니다). 그런 다음 iterB
은 다음 배치 코드 (또는 파일의 끝)까지 검색을 계속하면서 통과하는 페이지 수를 계산합니다. 그런 다음 배치 코드를 iterA
의 위치로 업데이트하면 프로세스가 반복됩니다.
이것은 스칼라가 아닌 것처럼 보입니다. 그리고 저는 여전히 이러한 변경 사항을 새로운 파일에 저장하는 좋은 방법을 고안하지 않았습니다.
이 문제에 대한 좋은 접근 방법은 무엇입니까? 반복자를 완전히 버려야할까요? 나는 전체 입력 또는 출력을 한 번에 메모리에 넣지 않아도되도록하고 싶습니다.
감사합니다.
이 솔루션은 2.9.x에서이 패턴을'Source.fromFile (".ps "). getLines.toStream' 스트림의 머리 부분을 유지합니다. http://stackoverflow.com/a/8640680/257449 및 https://issues.scala-lang.org/browse/SI-4835를 참조하십시오. – huynhjl
huynhjl, 발견 한 (성가신) 버그를 수정하기 위해 코드 샘플을 업데이트했습니다. 감사합니다. – stephenjudkins