Новое в Фортране, вопросы о записи в файл

Я совершенно новичок в Фортране и довольно плохо знаком с программированием в целом. Я пытаюсь скомпилировать сценарий, написанный кем-то другим. Это дает мне несколько проблем. Верхняя половина кода:

C 
C Open direct-access output file ('JPLEPH')
C 
OPEN ( UNIT = 12, 
. FILE = 'JPLEPH', 
. ACCESS = 'DIRECT', 
. FORM = 'UNFORMATTED', 
. RECL = IRECSZ, 
. STATUS = 'NEW' )


C
C Read and write the ephemeris data records (GROUP 1070). 
C 
CALL NXTGRP ( HEADER ) 

IF ( HEADER .NE. 'GROUP 1070' ) CALL ERRPRT(1070,'NOT HEADER') 

NROUT = 0 
IN = 0 
OUT = 0 


1 READ(*,'(2i6)')NRW,NCOEFF
if(NRW .EQ. 0) GO TO 1
READ (*,'(3D26.18)',IOSTAT =IN) (DB(K),K=1,NCOEFF) 


DO WHILE ( ( IN .EQ. 0 ) 
. .AND. ( DB(2) .LT. T2) ) 

IF ( 2*NCOEFF .NE. KSIZE ) THEN 
CALL ERRPRT(NCOEFF,' 2*NCOEFF not equal to KSIZE') 
ENDIF 

C
C Skip this data block if the end of the interval is less 
C than the specified start time or if the it does not begin 
C where the previous block ended. 
C 
IF ( (DB(2) .GE. T1) .AND. (DB(1) .GE. DB2Z) ) THEN 

IF ( FIRST ) THEN 
C 
C Don't worry about the intervals overlapping 
C or abutting if this is the first applicable 
C interval. 
C 
DB2Z = DB(1) 
FIRST = .FALSE. 
ENDIF 

IF (DB(1) .NE. DB2Z ) THEN 
C 
C Beginning of current interval is past the end 
C of the previous one.

CALL ERRPRT (NRW, 'Records do not overlap or abut') 
ENDIF 

DB2Z = DB(2) 
NROUT = NROUT + 1

print*,'Out =', OUT

WRITE (12,REC=NROUT+2,IOSTAT=OUT) (DB(K),K=1,NCOEFF)

print*,'Out2 =', OUT


IF ( OUT .NE. 0 ) THEN 
CALL ERRPRT (NROUT, 
. 'th record not written because of error') 
ENDIF 

Итак, когда я печатаю & quot; Out & quot; и & quot; Out2 & quot; на экране я нахожу, что Out = 0 и Out2 = 110. Поскольку он больше не равен нулю, программа выдает ошибку. Поэтому я в основном задаюсь вопросом о том, что здесь происходит:

WRITE (12,REC=NROUT+2,IOSTAT=OUT) (DB(K),K=1,NCOEFF)

Я предполагаю, что 12 относится к файлу, который я открыл (и создал), и хочу записать в. Что делают остальные первые скобки? И какой смысл второго? Это дает мне информацию, которую я хочу поместить в мой файл? В случае, где БД заполняется этим?

Вообще мне интересно, что идет не так? Почему OUT меняет значение? (Мне нужно т

NCOEFF определяется как Integer в начале программы, а DB: как DOUBLE PRECISION DB (3000), DB2Z / 0.d0 /, поэтому я предполагаю, что DB - это какой-то массив.

Ответы на вопрос(4)

Ваш ответ на вопрос