Fortran Coder

查看: 13009|回复: 8
打印 上一主题 下一主题

[文件读写] 小白求助 错误代码forrtl: severe (24): end-of-file during read

[复制链接]

4

帖子

1

主题

0

精华

入门

F 币
35 元
贡献
14 点
跳转到指定楼层
楼主
发表于 2020-4-4 19:48:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用fortran计算毕设里面要用的数据,错误代码查到是由于循环语句调用文件数据太多导致的 但是不知道具体怎么样修改循环语句来解决这个问题 求助各位好心人

QQ图片20200404194751.png (5.31 KB, 下载次数: 293)

出问题的具体语句

出问题的具体语句

BOsFJC.for

3.33 KB, 下载次数: 0

被调用

purel.for

12.1 KB, 下载次数: 1

出问题的程序

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
沙发
发表于 2020-4-5 00:37:16 | 只看该作者
声明一个整数变量,例如istat
read语句时,通过iostat=istat语句将读入状态写入istat,例如
read(1003,iostat=istat,*) XXXXXXXX
然后马上判断istat是不是0,若是0,说明正常读入,若不是0,说明读入错误,很可能到文件末尾了
这时候应该跳出读入循环
例如:
if (istat/=0) then
   exit
end if

4

帖子

1

主题

0

精华

入门

F 币
35 元
贡献
14 点
板凳
 楼主| 发表于 2020-4-5 11:01:08 | 只看该作者
liudy02 发表于 2020-4-5 00:37
声明一个整数变量,例如istat
read语句时,通过iostat=istat语句将读入状态写入istat,例如
read(1003,iost ...

谢谢您的帮助 我还想请您帮我看看我改的对不对...这个输出为什么全部是error...

QQ图片20200405105602.png (22.82 KB, 下载次数: 280)

QQ图片20200405105602.png

QQ图片20200405105554.png (37.05 KB, 下载次数: 240)

QQ图片20200405105554.png

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
地板
发表于 2020-4-5 11:54:41 | 只看该作者
letitgo1998 发表于 2020-4-5 11:01
谢谢您的帮助 我还想请您帮我看看我改的对不对...这个输出为什么全部是error... ...

不知道你的全部代码,也不知道你读入的是干什么……
很抱歉,我精力有限,无法帮你详细回答
不过,我觉得目前已经有输出了,你应该学会自己怎么通过查看输入输出去调试自己的程序

4

帖子

1

主题

0

精华

入门

F 币
35 元
贡献
14 点
5#
 楼主| 发表于 2020-4-5 12:13:40 | 只看该作者
liudy02 发表于 2020-4-5 11:54
不知道你的全部代码,也不知道你读入的是干什么……
很抱歉,我精力有限,无法帮你详细回答
不过,我觉得 ...

十分感谢

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
6#
发表于 2020-4-5 13:37:38 | 只看该作者

回头看了一眼你的代码,发现你的read语句没有给格式,这恐怕会带来问题
默认格式也是要有的,你先修复这个试试吧
只有在读二进制数据的时候,才不需要也不能用格式

4

帖子

1

主题

0

精华

入门

F 币
35 元
贡献
14 点
7#
 楼主| 发表于 2020-4-5 15:42:46 | 只看该作者
liudy02 发表于 2020-4-5 13:37
回头看了一眼你的代码,发现你的read语句没有给格式,这恐怕会带来问题
默认格式也是要有的,你先修复这 ...

好的 我目前是运行成功了 其实我刚接触fortran 都不知道怎么给格式....

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
8#
发表于 2020-8-20 15:35:14 | 只看该作者
liudy02 发表于 2020-4-5 13:37
回头看了一眼你的代码,发现你的read语句没有给格式,这恐怕会带来问题
默认格式也是要有的,你先修复这 ...

您好,我也是用abaqus调用fortran子程序计算,但是把数组Fxm和Fym 进行save以后就会报错:forrtl: severe (24): end-of-file during read, unit 55, file D:\temp\xdata.txt。去掉save能算,但是数组Fxm和Fym 全为0了就。想请问您这是为什么,下面是我的代码:
[Fortran] 纯文本查看 复制代码
!定义轴承力矩阵
      dimension Fxm(10001,2)
      dimension Fym(10001,2)
      double precision Fxm,Fym,Fx,Fy,F

      data iread /1/
      save iread
      save Fxm
      save Fym
      
      !只读入一次
      if (iread.eq.1) then
          
          iread=2
          !读入轴承力Fx数据
          open(55,file='D:\temp\xdata.txt',status='old')
          do ix=1,10001
              read(55,*)Fxm(ix,1),Fxm(ix,2)    !循环写入
          end do
          close(55)
      
          !读入轴承力Fy数据
          open(22,file='D:\temp\ydata.txt',status='old')
          do iy=1,10001
              read(22,*)Fym(iy,1),Fym(iy,2)    !循环写入
          end do
          close(22)
          
      end if


已经检查了很多遍txt文件的行数了,和命令对应没错

178

帖子

15

主题

0

精华

大宗师

F 币
4973 元
贡献
1152 点
9#
发表于 2020-8-22 00:53:25 | 只看该作者
本帖最后由 liudy02 于 2020-8-22 00:54 编辑
wzjdse 发表于 2020-8-20 15:35
您好,我也是用abaqus调用fortran子程序计算,但是把数组Fxm和Fym 进行save以后就会报错:forrtl: severe ...

你应该改进你的变量声明方式,而不是在老的格式里纠结
建议在所有文件的开头几行,use语句的后边都加上“implicit none”
关掉所有的默认变量类型,所有变量都必须声明类型
建议定义双精度实数的时候可以这样定义:
integer, parameter :: DP=kind(1.0d0)
real(kind=DP), dimension(10001, 2) :: Fxm, Fym
这样才是现在通用建议的做法

至于你本身的问题嘛,可能和这个无关。
你这应该是在一个函数或者子程序内部?
save语句会让被save的这几个变量在下次调用的时候会使用上一次的值
你save之后,如果你调用过这个函数或者子进程,那么之前iread已经置1了
所以不会重新读数据,也就是数据只读取了一次
而你不save的话,每次调用这个子程序,iread重新置1,就会重新读数据
不过其实问题还是有点奇怪,问题的产生说明你已经读到文件结尾了还在重新读数据
但是你每次读数据完了都close文件了,按理应该会重新从第一行读呀
估计你在程序的其他地方对文件操作了吧。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-4-20 00:25

Powered by Tencent X3.4

© 2013-2024 Tencent

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