CAFE

Fortran programming 잘 하는 법(4회) - OPEN문 활용(2)

작성자우리사랑|작성시간07.02.01|조회수7,234 목록 댓글 4

지난 호에서는 OPEN문을 사용하는 이유 및 간단한 문법 사항을 알아보았습니다.

 

요번 호에서는 이 내용에 대해서 좀 더 심도 깊게 살펴보도록 하겠습니다.

OPEN문의 형식은 다음과 같습니다.

 

OPEN( UNIT       = 정수,

           FILE        = 문자,

           ACCESS = 문자,

           STATUS = 문자,

           FORM     = 문자,

           IOSTAT   = 정수형 변수,

           RECL      = 정수,

           ERR        = 문번호

           END        = 문번호 )

 

보시는 바와 같이 생각보다 많은 옵션을 가지고 있습니다. 그렇다고 다 사용하는 것은 아니지만 ....

이 중에서 가장 기본적인 것은 'UNIT'과 'FILE' 입니다.

 

(1) UNIT(장치번호 : unit number )

     READ나 WRITE문에서 사용될 파일을 정의하기 위해서 사용합니다. 그 예는 다음과 같습니다.

  

     예제 1)

     OPEN(UNIT=11, FILE='SAMPLE.TXT' )

         ....

     READ(11,*) AN, BN, CN

    

     보시는 바와 같이 'UNIT=정수'라고 정의하고 READ나 WRITE문에서 그 번호를 사용하면 됩니다.

   

     예제 2)

     위의 예문에서 'UNIT='을 생략하여도 동일한 효과를 얻을 수 있습니다.

 

     OPEN(11, FILE='SAMPLE.TXT' ) 

 

     예제 3)

     장치 번호를 직접 숫자로 입력하여도 좋지만 이렇게 되면 혼돈되는 경우도 있기 때문에 변수로

     정의하여 주는 것이 복잡한 프로그램에서는 더욱 효율적입니다.

 

     INTEGER MINP, MOUT1, MOUT2, MOUT3

        .....

     MINP = 11

     MOUT1 = 21

     MOUT2 = 22

     MOUT3 = 23

C

     OPEN(MINP, FILE='SAMPLE.TXT' )

     OPEN(MOUT1, FILE='T1')

     OPEN(MOUT2, FILE='T2')

     OPEN(MOUT3, FILE='T3')

        .....

     CALL READ_DAT( MINP, .... )

     CALL WRIT_DAT_1( MOUT1, .... )

     CALL WRIT_DAT_2( MOUT2, MOUT3, ... )

        .....

     SUBROUTINE READ_DAT( MINP, ....

        ....

     READ(MINP,*) .....

 

     보시는 바와 같이 하면 여러개의 파일을 동시에 열더라도 혼란이 작아집니다.

     그리고, MINP이라는 변수를 SUBROUTINE으로 넘길 때 COMMON등을 사용해도 되지만

     보시는 바와 같이 ARGUMENT로 넘기는 것을 추천합니다.

 

     왜냐하면 메일 프로그램에서 CALL 되는 부분만 보아도 어떤 파일과 관련되는 작업이

     여기서 진행되는구나 하는 것을 파악하기 쉽기 때문에 readability가 화~~ㄱ 좋아지고

     실수를 할 가능성이 작아집니다.

 

     또한, ARGUMENT로 넘길 때, IN/OUT의 장치 번호는 매 앞에 써 주는 것이 좋습니다.

 

     참고로, 장치 번호를 정의할 때, INPUT과 관련해서는 10~19번을, OUTPUT과 관련해서는

     20~29번을 SCRATCH FILE과 관련해서는 70~79 번과 같이 나름대로 법칙을 정해서

     사용하는 것이 실수를 줄일 수 있는 방법이기도 합니다.

 

(2) FILE(파일이름)

     READ나 WRITE문에서 사용될 파일을 이름을 정의하기 위해서 사용합니다. 별다른 예외사항은

     없습니다.

 

(3) STATUS

     초보자 여러분들이나 보통은 잘 사용하지 않는 것입니다만, 파일 OPEN시 반드시 정의를 해 주는

     것이 좋습니다.  STATUS는 4가지가 있습니다. 'NEW' 'OLD' 'UNKNOWN' 'SCRATCH'

     그 예는 다음과 같습니다.

  

     예제 1)

     OPEN(UNIT=11, FILE='SAMPLE.TXT', STATUS='OLD' )

         ....

     READ(11,*) AN, BN, CN

    

     보시는 바와 같이 STATUS='OLD' 로 선언을 하면 이미 존재하는 파일이라는 의미를 갖습니다.

     따라서, READ 문이 이 파일에 엑세스할 수 있게 되지요. 그런데, 위의 문장에서 STATUS='NEW'

     바꾸면 새롭게 생성되어야 하는 파일을 의미하므로 READ시 에러가 발생하게 됩니다.

 

     어떤 경우에 사용하나구요? ---> READ시 파일이 존재하지 않아서 에러가 발생하는 경우를

     막기 위해서 사용합니다.

 

     예제 2)

     OPEN(UNIT=11, FILE='SAMPLE.TXT', STATUS='NEW' )

         ....

     WRITE(11,*) AN, BN, CN

 

     STATUS='NEW' 라고 정의하면 새롭게 파일을 생성하는 경우에 사용됩니다. 사실 OUTPUT을

     정의할 때는 매우 유용한 정의입니다. 예를 들어, 한 번 해석을 수행하여 OUTPUT을 만들고,

     조건을 달리하여 또 해석을 수행할 때, STATUS='NEW' 가 정의되어 있지 않으면 덮어쓰기를

     하게 됩니다. 그러면, 지난 번에 수행한 결과는 ... 당연히 날라가지요.

     그런데, 한 번 해석 수행하는 데 40시간이 소요되었다면 .....   -> 미침다.

     이럴 때, 이 옵션을 사용하면 프로그램이 FILE에 대한 이름을 찾아서 존재하는 파일이면

     에러 메세지를 내고 정지를 하게 됩니다. 이럴 때 아주 유용하게 사용할 수 있습니다.

 

     예제 3)

     OPEN(UNIT=11, FILE='SAMPLE.TXT', STATUS='UNKNOWN' )

 

     이 경우에 파일이 존재하면 STATUS='OLD'가 되고 그런 파일이 없으면  STATUS='NEW' 로

     프로그램이 자동 설정하게 됩니다. STATUS에 대해서 정의하지 않으면 STATUS='UNKNOWN'

     인 것으로 인식을 하게 됩니다.

     따라서,

 

     OPEN(UNIT=11, FILE='SAMPLE.TXT')

 

     은 위의 문장과 같은 의미를 갖게 됩니다.

 

     요번에는 OPEN문의 기초를 알아보았는 데 다음에는 다른 옵션을 사용하여 좀 더 파워풀한 프로그램을

     할 수 있는 쪽으로 알아보도록 하겠습니다.

    

 

다음검색
현재 게시글 추가 기능 열기

댓글

댓글 리스트
  • 작성자경제운 | 작성시간 07.02.01 초보자들이 궁금한 사항을 알기 쉽게 잘 설명해주 셨네요. 감사합니다. 혹시 연재하실 목차를 미리 알려주시면 제가 공지사항에 올려놓도록 하겠습니다. 그러면 초보자 및 궁금하신분들께 더욱 많은도움이 될듯합니다. 감사합니다.
  • 작성자불꽃남자 | 작성시간 07.02.01 고맙습니다. 초보인 저에게 많은 도움이 되는거 같습니다. 항상 고맙게 읽고 있습니다. 건강하시고 감기 조심하시길...
  • 작성자whitepeach | 작성시간 07.02.02 정말 감사합니다. 많은 도움이 되고 있습니다.^^
  • 작성자곽수빈 | 작성시간 18.08.01 좋은 글 감사합니다.
댓글 전체보기
맨위로

카페 검색

카페 검색어 입력폼