紫雪封尘 发表于 2020-12-10 16:08:09

关于Fortran 读取IBM格式的segy,读取结果与Segy分析工具不一...

本帖最后由 紫雪封尘 于 2020-12-10 16:22 编辑

我最近用Fortran 读取SUN工作站格式sgy文件,但是读取结果与segy分析工具和matlab 读取结果不一致 ,我感觉程序有问题,下面附上我的代码,请各位老师指教
open(70,file=FileName1,         &    !打开segy文件
    access='stream',                  &    !<< 流访问,即按字节访问文件
    form='unformatted',             &
    CONVERT='BIG_ENDIAN',   &    !<< IEEE Big Endian^^ Little_ENDIAN
    iostat=ios,                           &
    iomsg=iom)

Do i=1,ntrace
      irec=3600+(i-1)*(nt*4+240)!读取的二进制位置
      read(70,pos=irec+1) head
      write(19,pos=(i-1)*240+1) head
      read(70,pos=73+irec) sx(i)   !道头中73-76字节表示炮点x坐标
      write(13,pos=(i-1)*4+1) sx(i)
      read(70,pos=77+irec) sy(i)   !道头中73-76字节表示炮点y坐标
      !!道头中77-80字节表示炮点y坐标
      write(14,pos=(i-1)*4+1) sy(i)
      read(70,pos=81+irec) rx(i)   !道头中81-84字节表示检波点x坐标
      write(15,pos=(i-1)*4+1) rx(i)
      read(70,pos=85+irec) ry(i)   !道头中85-88字节表示检波点y坐标
      write(16,pos=(i-1)*4+1) ry(i)
      read(70,pos=241+irec) (sgydata(j,i),j=1,nt)!!读取sgy数据
      write(*,*)sgydata(1,i)   
    End DO



vvt 发表于 2020-12-10 21:27:55

因为你的系统是 IEEE浮点,而不是IBM浮点。你需要转换一下。

紫雪封尘 发表于 2020-12-13 19:28:50

vvt 发表于 2020-12-10 21:27
因为你的系统是 IEEE浮点,而不是IBM浮点。你需要转换一下。

您的意思是我读取的数据是IBM格式的,但是我是用IEEE格式的浮点数存储的,所以输出到屏幕上的数值是不正确的,需要改变存储的位顺序嘛?可我不是很清楚这个怎么转换啊,我倒是从网上找到了一篇文章,和C语言的代码,但是Fortran的转换,我无处下手,请指教啊{:4_111:}
页: [1]
查看完整版本: 关于Fortran 读取IBM格式的segy,读取结果与Segy分析工具不一...