2014-12-07 5 views
0

여러 파일을 열어 읽는 데 몇 가지 문제가 있습니다. 나는 같은 방식으로 포맷 된 n 개의 파일에서 두 개의 열을 읽는 코드를 작성해야한다. 이 전에 다른 결과 파일을 열고 결과를 작성합니다. 나는이 포럼 (such as this one)에 다른 질문을 읽고 같은 일을했지만, 나는이 오류가 나타납니다Fortran 90에서 여러 파일을 열고 읽는 방법

read(fileinp,'(I5)') i-49 
        1 
devstan.f90:20.24: 

fileLoop : do i = 50,52 
        2 
Error: Variable 'i' at (1) cannot be redefined inside loop beginning at (2) 

read(fileinp,'(I5)') i-49 
      1 
Error: Invalid character in name at (1) 

내 파일이 1부터 n까지 번호가 명명됩니다 'lin * 27-n.dat'(n은 1부터 시작하는 인덱스 임) 코드는 다음과 같습니다.

program deviation 
    implicit none 

    character(len=15) :: filein,fileout,fileinp 
    integer :: row,i,h 
    real :: usv,usf,tsv,tsf,diff 


    write(*,'(2x,''Input file .......''/)') 
    read(*,'(a12)') filein 
    write(*,'(2x,''Output file........''/)') 
    read(*,'(a12)') fileout 
    open(unit = 30,File=filein) 
    open(unit = 20,File=fileout) 


    fileLoop : do i = 50,52 
    fileinp = 'lin*27-' 
    read(fileinp,'(I5)') i-49 
    open(unit = i,File=fileinp) 


    do row = 1,24 
    read(30,*) h,usv,tsv 
    read(i,*) h,usf,tsf 

    diff = usf - usv 

    write(20,*) diff 
    enddo 
    close(i) 
    enddo fileLoop 

end program deviation 

어떻게 해결할 수 있습니까? 나는 Fortran에서 프로 아니므로, 어려운 언어를 사용하지 마십시오. 감사합니다. 이 read 문이 오히려 쓰기보다 변수 fileinp에서 읽기를 시도 :

답변

0

성가신 라인은

read(fileinp,'(I5)') i-49 

당신은 반드시이 write (링크 된 예에서와 같이) 할 말은있다.

즉, 단순히 write으로 바꾸는 것이 아마도 필요한 것이 아닐 수도 있습니다. 이것은 이전 줄을 무시합니다. "1", "2", "3"(선행 공백 포함)으로 설정하면됩니다. 같은 뭔가가 아니라 I5보다는

write(fileinp, '("lin*27-",I1)') i-49 

도 참고 형식으로 I1의 사용, (당신 가정은 *가 될 것으로 예정) : 하나의 파일 이름에 공백을 방지 할 수 있습니다. [정확하게 한 자 리가있을 때 적합합니다. Iw.mI0을 일반화 할 때 찾으십시오.]

+0

감사합니다. francescalus하지만 입력 파일이 'lin * 27-1'인 경우 I5.5를 I1로 변경하면됩니까? 왜냐하면 런타임에이 오류가 나타납니다. devstan.f90 파일의 28 번째 줄 (단위는 50, 파일은 'lin * 27-00001') 포트란 런타임 오류 : 파일 끝 –

+0

내 업데이트를 확인하십시오. – francescalus