2016-07-25 12 views
0

Fortran에서 일부 파일의 데이터를 읽으려는 경우, 파일 이름에 정규 주문이있는 경우이를 수행 할 수 있습니다. 하지만 이제는 모든 고정 접두어가 예 : Fix001, Fix002, Fix023, Fix432 ...fortran에서 특정 확장명 (이름의 접두어)이있는 모든 파일을 여는 방법은 무엇입니까?

사용자가 접두사를 가져 와서 모든 파일을 루프에 열어 읽기를 원한다면 데이터를 읽고 단일 파일로 작성하십시오. 아이디어가 있으십니까? 감사합니다. . 당신이 상한이있는 경우

PROGRAM Output 
Implicit none 
Integer ::n=5  !number of files 
Integer ::nn=50 !number of rows in each file 
Integer ::i,j 
Real,Dimension(:),Allocatable::t,x,y,z 
Character(len=12)::TD 

Open(11,file='outputX.txt') 
Allocate (t(1000),x(1000),y(1000),z(1000)) 

j=0 
Do i=1,n 
    Write(TD,10)i 
    Write(*,*)TD 
    Open(1,file=TD) 
     Read(1,*)(t(j),x(j),j=1,nn) 
     Write(11,20)(x(j),j=1,nn) 
j=j+1 
Enddo 

10 Format('100',i3.3,'') 
20 Format(<nn>E25.8E3) 

Deallocate(x,y,z,t) 
END PROGRAM Output 
+0

FYI '정수 : N = 5' 정수'동등하지 않다 : N ; n = 5'이지만 'integer, save :: n = 5'입니다. 이것은 많은 새로운 Fortraners를 놀라게합니다. – jlokimlin

+0

자백, 나도 몰랐다.하지만 어쨌든 이제는 작동한다.) –

+0

그 프로그램에서 어떤 문제가 발생 했습니까? – francescalus

답변

1

, 당신은 그 성공 여부 iostat 매개 변수를 사용하여 파일 및 테스트를 열려고 할 수 있습니다. 그렇지 않은 경우 파일을 건너 뜁니다.

파일에서 첫 번째 정수 변수를 판독하고, 출력 파일에 추가 한 예이다 :

program read_files 
    implicit none 
    integer :: i, d 
    integer :: ioerr 
    character(len=len("FixXXX.txt")) :: fname 

    open(unit=30, file="Output.txt", action="write", iostat=ioerr) 
    if (ioerr /= 0) stop 1 

    do i = 0, 999 
     write(fname, '(A, I3.3, A)') "Fix", i, ".txt" 
     open(unit = 40, file=fname, status="old", action="read", iostat=ioerr) 
     if (ioerr /= 0) cycle 
     read(40, *) d 
     write(30, *) d 
     close(40) 
    end do 
end program read_files 
+0

OP는 gfortran을 사용하기 때문에 파일 단위 식별자를 하드 코딩하는 대신 newunit 지정자를 사용하는 것이 좋습니다. – jlokimlin

+0

'newunit'문이 'new'인 방법을 모르겠습니다. 그는 F77에서 F95에 관해 질문했습니다. 그래서이 범위를 벗어나는 일은하고 싶지 않았습니다. – chw21

+1

'newunit'지원없이 컴파일러를 사용하는 사용자는 http://fortranwiki.org/fortran/show/newunit에서 컴파일러가 업데이트 될 때까지 사용할 수있는 사용자 구현을 볼 수 있습니다. –