메모리에 들어 가지 않는 대용량 파일로 작업해야합니다. 그렇지 않은 경우에도 특정 부분을 찾아 수정해야하기 때문에 메모리에 전체 파일이 필요하지 않습니다.파일을 메모리로 이동하지 않고 어떻게 루비로 작업 할 수 있습니까?
이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
메모리에 들어 가지 않는 대용량 파일로 작업해야합니다. 그렇지 않은 경우에도 특정 부분을 찾아 수정해야하기 때문에 메모리에 전체 파일이 필요하지 않습니다.파일을 메모리로 이동하지 않고 어떻게 루비로 작업 할 수 있습니까?
이 작업을 수행하는 가장 좋은 방법은 무엇입니까?
다음은 큰 파일 정렬의 중간을 메모리에 전혀 읽지 않고 미세 조정하는 예입니다. 당신이 조금을 읽고 싶어하지만, 여러 상황에 IO.sysread.
TestFile = '/tmp/test'
system "cp /usr/share/dict/words #{TestFile}; chmod +w #{TestFile}"
File.open TestFile, 'r+' do |io|
io.sysseek 1000000
io.syswrite 'EASTER EGG!!!'
end
system "grep EASTER.EGG #{TestFile}"
sysread 및 SYSWRITE가 유용한 참조 :
감사합니다. 음, docs에서'# seek'과'# sysseek'의 차이점을 알 수는 없지만 ... 그것이 무엇인지 압니까? –
모듈로 나눌 수 있습니까? 여러 파일? – iouri
예를 들어이 흥미로운 질문의 요점을 무시할 것이기 때문에 논쟁을 위해서, 아니오라고 가정하십시오. –
예. 아무도 ** 파일 전체를 메모리로 읽어야한다고 말하지는 않습니다. 표준 스트리밍 (필요에 따라 입력/출력 만 가능), 무작위 액세스 (레코드 읽기) 및 mmap (표준 탐색 모델과 유사)이 있습니다. 물론 일부 작업 (예 : 전면에 추가 또는 삭제 - 더 복잡 할 수 있습니다. –