编写的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 11:03 编辑
这是用SEISEE软件打开的第一道前26个采样点数据
试试 convert='IBM' li913 发表于 2022-9-2 14:17
试试 convert='IBM'
已解决, real*4,ALLOCATABLE::SEISMIC_DATA(:)这个语句改为 integer*4,ALLOCATABLE::SEISMIC_DATA(:)后就正常了。可能我用的sgy文件数据部分就是以整形存储的,用实型变量读的话就出现这种情况。 sgy卷头中3225-3226字节表示数据格式,你的可能是2 本帖最后由 zy_cd 于 2022-9-9 16:14 编辑
li913 发表于 2022-9-9 11:08
sgy卷头中3225-3226字节表示数据格式,你的可能是2
确实是2,再次感谢,您也是物探专业的吗?
zy_cd 发表于 2022-9-9 16:09
确实是2,再次感谢,您也是物探专业的吗?
恩,Fortran程序员物探的很多。
页:
[1]