Binary 执行随数据文件提供的Fortran代码时发生读取错误

Binary 执行随数据文件提供的Fortran代码时发生读取错误,binary,fortran,Binary,Fortran,我需要打开一个二进制文件,数据开发人员为其提供用Fortran编写的程序。我是Fortran语言的新手,但我认为值得尝试使用ready程序,而不是自己在R上编写一个新程序 我要打开的文件是数据手册,可以找到打开数据的代码行。数据开头包含一个576字节的标题行,可以使用打开该行 我所做的: 将二进制文件保存在一个新文件夹中,我还在其中保存了打开该文件的软件的代码。将终端设置到后一个文件夹(cd/home/urs/./)后,从GNU Linux终端运行: # compile the program

我需要打开一个二进制文件,数据开发人员为其提供用Fortran编写的程序。我是Fortran语言的新手,但我认为值得尝试使用ready程序,而不是自己在R上编写一个新程序

我要打开的文件是数据手册,可以找到打开数据的代码行。数据开头包含一个576字节的标题行,可以使用打开该行

我所做的: 将二进制文件保存在一个新文件夹中,我还在其中保存了打开该文件的软件的代码。将终端设置到后一个文件夹(
cd/home/urs/./
)后,从GNU Linux终端运行:

# compile the program using gfortran
  gfortran read_v2.2_month.f -o read_v2.2_month
# make file executable
chmod +x read_v2.2_month
# run the program
./read_v2.2_month
但是,我得到以下错误:

 Error: read error        5016  on file gpcp_v2.2_psg.1987
编辑: Fortran中用于打开不包括标题第一行的数据的代码如下:

     OPEN  ( UNIT=10, FILE='gpcp_v2.2_psg.1987', ACCESS='DIRECT', 
     +          FORM='UNFORMATTED', STATUS='OLD', RECL=144, 
     +      IOSTAT=iret )
        IF  ( iret .NE. 0 )  THEN 
            WRITE (*, *) 'Error: open error', iret, 
     +                   ' on file gpcp_v2.2_psg.1987'
            STOP
        END IF
C
C       Compute the number of records to skip, namely 1 for the header 
C       and 72 for each intervening month.
C
        nskip = 1 + ( month - 1 ) * 72
C
C       Read the 72 rows of data and close the file.
C
        DO  10 j = 1, 72
            READ ( UNIT=10, REC=j+nskip, IOSTAT=iret )  
     +           ( data (i, j), i = 1, 144 )
            IF  ( iret .NE. 0 )  THEN 
                WRITE (*, *) 'Error: read error', iret, 
     +                       ' on file gpcp_v2.2_psg.1987'
                STOP
            END IF
   10   END DO
        CLOSE ( UNIT=10 )
C
C       Now array "data" is ready to be manipulated, printed, etc.
C       For example, dump the single month as unformatted direct:
C
        OPEN  ( UNIT=10, FILE='junk', ACCESS='DIRECT', 
     +          FORM='UNFORMATTED', RECL=144, IOSTAT=iret )
        IF  ( iret .NE. 0 )  THEN 
            WRITE (*, *) 'Error: open error', iret, 
     +                   ' on file junk'
            STOP
        END IF
        DO  20 j = 1, 72
            WRITE ( UNIT=10, REC=j, IOSTAT=iret )  
     +            ( data (i, j), i = 1, 144 )
            IF  ( iret .NE. 0 )  THEN 
                WRITE (*, *) 'Error: write error', iret, 
     +                       ' on file junk'
                STOP
            END IF
   20   END DO
        CLOSE ( UNIT=10 )
        STOP
        END

这段代码中有些地方可能出错。例如,RECL以gfortran为单位,以字节为单位,但代码假定为4字节字(就像Intel那样)。不应明确指示RECL值


尝试将RECL增加到4*144。如果有帮助,那么这个问题是重复的

我认为我们需要查看代码。我不关注您的链接。在此发布最小的复制代码。顺便说一句,错误5016是
5016 LIBERROR\u SHORT\u RECORD