Fortran Coder

查看: 11414|回复: 9
打印 上一主题 下一主题

[文件读写] Fortran 读取SEGY文件 提示(95)浮点数转换失败

[复制链接]

10

帖子

3

主题

0

精华

入门

F 币
66 元
贡献
34 点
跳转到指定楼层
楼主
发表于 2021-6-16 15:19:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kuangshenzk 于 2021-6-16 15:53 编辑

读取IBM格式的SEGY数据时,  浮点数 提示转换失败,  使用的是Open语句中 convert ibm,1、这个有什么解决方案,修改这个错误   2、经验证,转换失败处的浮点数应该为0,属于无效值,但是因为存在这个问题所以读取整个数据时间花费太多,有没有什么方案可以提速
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

10

帖子

3

主题

0

精华

入门

F 币
66 元
贡献
34 点
沙发
 楼主| 发表于 2021-6-16 15:30:45 | 只看该作者
program main
    !use IFWin
    !
    !aa=call CreateFile("cc.dat",0,0,0,0,0,0)
    integer:: aa
    integer(kind=1):: a(3600)
    integer(kind=1):: b(240)
    !character(len=5):: aa
    real::            m(16)
    !aa="11"//"bb"
    open(100,file="BCO3_3D.sgy",form="unformatted",access="stream",convert="ibm")   
    read(100)a
    !do i=1,1000,1
    !read(100)b
    !read(100,IOSTAT = aa)m
    !end do
        read(100)b
    read(100)m
   

    end program main

10

帖子

3

主题

0

精华

入门

F 币
66 元
贡献
34 点
板凳
 楼主| 发表于 2021-6-16 15:32:21 | 只看该作者
提示的错误:
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed
forrtl: info (95): floating point conversion failed

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1574 元
贡献
676 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

地板
发表于 2021-6-16 17:47:07 | 只看该作者
应该是你的sgy里有道头或卷头。你直接读了地震记录,编译器错误的把道头或卷头里的其他数据类型,当作IBM浮点数转换成IEEE浮点,造成出错。

10

帖子

3

主题

0

精华

入门

F 币
66 元
贡献
34 点
5#
 楼主| 发表于 2021-6-17 10:47:21 | 只看该作者
fcode 发表于 2021-6-16 17:47
应该是你的sgy里有道头或卷头。你直接读了地震记录,编译器错误的把道头或卷头里的其他数据类型,当作IBM浮 ...

read(100)m报出的错误  读这个的时候 我把卷头和道头信息都读出去了

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1574 元
贡献
676 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

6#
发表于 2021-6-17 14:34:12 | 只看该作者
把sgy文件传上来(附件,如果太大就百度网盘分享地址)

10

帖子

3

主题

0

精华

入门

F 币
66 元
贡献
34 点
7#
 楼主| 发表于 2021-6-18 16:09:12 | 只看该作者
您好  我截取了一道数据    数据包含  3600byte 的卷头  240byte 道头  和 道采样500个数据点

Test.rar

1.55 KB, 下载次数: 2

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1574 元
贡献
676 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

8#
发表于 2021-6-20 23:03:11 | 只看该作者
你的这个文件是 IBM 浮点数大端的数据。
你的编译器没有提供直接的方法读取。convert 只有 'BIG_ENDIAN' , 'IBM' 而没有 IBM_Big_Endian

你可以当作 IEEE浮点数大端,先读进来,然后找一个IBM浮点转IEEE浮点的子程序再转一下。
  

10

帖子

3

主题

0

精华

入门

F 币
66 元
贡献
34 点
9#
 楼主| 发表于 2021-6-21 16:30:59 | 只看该作者
fcode 发表于 2021-6-20 23:03
你的这个文件是 IBM 浮点数大端的数据。
你的编译器没有提供直接的方法读取。convert 只有 'BIG_ENDIAN' , ...

谢谢回复,还有个疑问,我现在想通过位计算算数据,这样的浮点数读按字节读入后 是不是也要调换字节顺序,然后再用ibm公式计算浮点数值?我算了一下 我发现不调换顺序 计算结果好像是正确的,调换后不正确了

2015

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1574 元
贡献
676 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

10#
发表于 2021-6-21 17:59:01 | 只看该作者
如果你 convert="big_endian" 了,那么编译器会帮你转换字节序。
否则,你需要自己转换字节序
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-11-15 01:11

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表