zy_cd 发表于 2022-8-31 10:51:31

编写的SGY 文件道数据读取程序,读取的与seisee显示的不同

这是我写的代码
    program SRME
    real*4,ALLOCATABLE::SEISMIC_DATA(:)
    CHARACTER*20 filename
    integer*2 SAMPLE_RATE,TRACE_LENGTH,TRACE_AMOUNT

      TRACE_AMOUNT=5765
    filename='Z10-CH-1.sgy'
      
    WRITE(*,*)'获得SGY数据采样率、采样长度'
    OPEN(15,FILE=FILENAME,ACCESS='DIRECT',
   $FORM='BINARY',RECL=2,convert='big_endian')
    READ(15,REC=1859) SAMPLE_RATE
    READ(15,REC=1858) TRACE_LENGTH
    WRITE(*,*)'采样率=',SAMPLE_RATE,'采样长度=',TRACE_LENGTH
    CLOSE(15)
    ALLOCATE(SEISMIC_DATA(1:TRACE_LENGTH))   
         
       OPEN(30,FILE=FILENAME,FORM='binary',
   $ACCESS='DIRECT',RECL=4,convert='big_endian')
       WRITE(*,*)'读取SGY地震数据'
       DO I=1,TRACE_AMOUNT
          OPEN(30,FILE=FILENAME,FORM='BINARY',
   $ACCESS='DIRECT',RECL=4,convert='big_endian')
            DO L1=1,TRACE_LENGTH
             READ(30,REC=900+60*I+(I-1)*TRACE_LENGTH+L1)
   $SEISMIC_DATA(L1)
             write(*,*)L1,seismic_data(l1)
          END DO
    PAUSE
         END DO
      END PROGRAM

这是运行结果,是sgy文件第一道前26个采样点的数据






zy_cd 发表于 2022-8-31 10:52:06

本帖最后由 zy_cd 于 2022-8-31 11:03 编辑

这是用SEISEE软件打开的第一道前26个采样点数据


li913 发表于 2022-9-2 14:17:00

试试 convert='IBM'

zy_cd 发表于 2022-9-9 10:16:34

li913 发表于 2022-9-2 14:17
试试 convert='IBM'

已解决, real*4,ALLOCATABLE::SEISMIC_DATA(:)这个语句改为 integer*4,ALLOCATABLE::SEISMIC_DATA(:)后就正常了。可能我用的sgy文件数据部分就是以整形存储的,用实型变量读的话就出现这种情况。

li913 发表于 2022-9-9 11:08:00

sgy卷头中3225-3226字节表示数据格式,你的可能是2

zy_cd 发表于 2022-9-9 16:09:33

本帖最后由 zy_cd 于 2022-9-9 16:14 编辑

li913 发表于 2022-9-9 11:08
sgy卷头中3225-3226字节表示数据格式,你的可能是2

确实是2,再次感谢,您也是物探专业的吗?

li913 发表于 2022-9-11 16:51:12

zy_cd 发表于 2022-9-9 16:09
确实是2,再次感谢,您也是物探专业的吗?

恩,Fortran程序员物探的很多。
页: [1]
查看完整版本: 编写的SGY 文件道数据读取程序,读取的与seisee显示的不同