2017-04-01 10 views
0

루프 내에서 거대한 파일 (10^10 행 이상)의 항목을 읽길 원합니다. 파일이 거대하기 때문에 한 번에 하나의 요소를 읽고, 다음 요소를 읽는 등의 작업을합니다. 따라서, 나는 이런 식으로 있습니다 :Fortran 95에서 파일의 내용을 반복해서 읽음

DO i = 1, 10 
    open(unit = 1, file = 'myfile.dat') 
    Do j = 1, 10^10 
     read(1, *)x 
     !Use x here 
    Enddo 
    close(1) 
ENDDO 

외부 루프가 작은 횟수로 실행될 때 잘 작동합니다. 그러나 더 많은 시간 (100에서 1000)을 실행하려고 할 때 컴퓨터가 멈추거나 오류가 발생합니다 : Not enough space on \tmp. this을 보았지만 문제가 해결되지 않았습니다. 내 기본 추측은 내가 파일을 다시 열 때마다 RAM이나 tmp에 저장되기 때문에 이런 일이 일어나고 있다는 것입니다. 그러나 이것에 대해서는 확실하지 않습니다. 이런 맥락에서, 아무도 나에게 한 번만 파일을로드하는 좋은 방법을 말해 줄 수 있지만 반복해서 내용을 읽을 수 있습니까?

+1

당신이 우리에게 올바른 컴파일 가능한 예제를 줄 수 있습니다. 예를 들어 10^10은 포트란이 아닙니다. 나는 또한 x의 정의를보고 싶습니다. –

+0

@FrancoisJacq : 예'10^10'은 포트란이 아니며 제 질문에서 어디에도있을 수 없습니다. 내 포트란 스 니펫을 올바르게 코드 차단했습니다. – Peaceful

답변

2

당신은 그것을 "되감기"파일을 닫습니다 필요가 없습니다 :

open(newunit = iunit, file = 'myfile.dat') !no need to specify the number, the compiler will do it for you, iunit is an integer 
do i = 1, 10 
    do j = 1, 10**10      !fortran compilable 
     read(iunit, *)x 
     !Use x here 
    end do 
    rewind(iunit)   
end do 

close(iunit) 
+0

예 찾았습니다. 어쨌든 고마워! – Peaceful