看起来这是一个经过充分讨论的问题。但我发现的讨论仍然没有帮助。
因此,有一个可以生成临时二进制文件的软件。每个数据都是一个大矩阵(5568;5568)。据我了解,它将它们保存在 float 32 中。
现在我需要查看其中一些二进制文件中的内容,因此用 Fortran90 编写一个程序,因为这对我来说更容易。但我所做的,不起作用!!
辅助模块里面的内容并不重要,它只是读取设置并构建要打开的好文件名。 我认为用于按值读取二进制文件值的变量类型很重要,但显然不是,因为我将“R_VAL”定义为单精度或双精度(甚至是整数),并且它总是在我完成之前停止填满我的桌子,这不好。
我的 READ 或 OPEN 有问题,但我找不到问题所在。
谢谢。
这是 Fortran 代码
PROGRAM MYFLOAT
USE AUXILIARY
IMPLICIT NONE
CHARACTER(LEN=255) :: C255_ROOT,C255_Setup
INTEGER :: I_TIME,I_ECH,I_LEV,I_COL,I_LIN
INTEGER, PARAMETER :: I_WP = KIND(1.0) ! I_WP = KIND(1.0d0)
INTEGER :: I_IOPAR=2222
INTEGER :: I_iostat
REAL(I_WP) :: R_VAL
INTEGER :: I_VAL
!__________________________________________________________________________________________________
! START
CALL GETARG(1,C255_ROOT)
CALL GETARG(2,C255_Setup)
ST_SAT%C255_ROOT=C255_ROOT
PRINT*," [I] :: file will look like : "
PRINT*," => ",C255_ROOT
PRINT*," "
PRINT*," [I] :: SETUPS IN : ",C255_Setup
CALL AUXI_ReadSetupFile(C255_Setup)
CALL AUXI_GetGEOsatDef(ST_SAT%I_ID)
PRINT*," [I] :: TAB SIZE = (",ST_SAT%I_NLIN,";",ST_SAT%I_NCOL,";",ST_SAT%I_NLEV,")"
DO I_TIME=1,ST_SAT%I_NTIME
DO I_ECH=1,ST_SAT%I_NECH
ALLOCATE(ST_SAT%RT3_MyVar(ST_SAT%I_NLIN,ST_SAT%I_NCOL,ST_SAT%I_NLEV))
DO I_LEV=1,ST_SAT%I_NLEV
CALL AUXI_SetInputFilename(I_TIME,I_ECH,I_LEV)
PRINT*," [I] :: Reading Filename : ",ST_SAT%C255_InputFile
OPEN(UNIT=I_IOPAR, &
FILE=ST_SAT%C255_InputFile, &
FORM="unformatted", &
ACCESS='STREAM', &
ACTION="read", &
POSITION="rewind", &
IOSTAT=I_iostat )
IF(I_iostat.ne.0)STOP " => Problème à l'ouverture"
DO I_COL=1,ST_SAT%I_NCOL
DO I_LIN=1,ST_SAT%I_NLIN
READ(I_IOPAR,IOSTAT=I_iostat) R_VAL
IF(I_iostat.ne.0)THEN
PRINT*," [T] :: I_LIN= ",I_LIN
PRINT*," [T] :: I_COL= ",I_COL
STOP " => MISSING VALUES IN MATRIX ! "
ENDIF
ST_SAT%RT3_MyVar(I_LIN,I_COL,I_LEV)=R_VAL
ENDDO
ENDDO
CLOSE(I_IOPAR)
ENDDO
DEALLOCATE(ST_SAT%RT3_MyVar)
ENDDO
ENDDO
!__________________________________________________________________________________________________
! END
ENDPROGRAM MYFLOAT
``
the console output ::
[T] :: I_LIN= 3713
[T] :: I_COL= 155
STOP => MISSING VALUES IN MATRIX !
以我的愚见,需要用 C 和 Fortran 代码编写一个最小工作示例并附加结果数据文件。以及打印文件中的每个值。