Fortran Coder

标题: 小白求助 错误代码forrtl: severe (24): end-of-file during read [打印本页]

作者: letitgo1998    时间: 2020-4-4 19:48
标题: 小白求助 错误代码forrtl: severe (24): end-of-file during read
用fortran计算毕设里面要用的数据,错误代码查到是由于循环语句调用文件数据太多导致的 但是不知道具体怎么样修改循环语句来解决这个问题 求助各位好心人

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

出问题的具体语句

出问题的具体语句

BOsFJC.for

3.33 KB, 下载次数: 0

被调用

purel.for

12.1 KB, 下载次数: 1

出问题的程序


作者: liudy02    时间: 2020-4-5 00:37
声明一个整数变量,例如istat
read语句时,通过iostat=istat语句将读入状态写入istat,例如
read(1003,iostat=istat,*) XXXXXXXX
然后马上判断istat是不是0,若是0,说明正常读入,若不是0,说明读入错误,很可能到文件末尾了
这时候应该跳出读入循环
例如:
if (istat/=0) then
   exit
end if
作者: letitgo1998    时间: 2020-4-5 11:01
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

作者: liudy02    时间: 2020-4-5 11:54
letitgo1998 发表于 2020-4-5 11:01
谢谢您的帮助 我还想请您帮我看看我改的对不对...这个输出为什么全部是error... ...

不知道你的全部代码,也不知道你读入的是干什么……
很抱歉,我精力有限,无法帮你详细回答
不过,我觉得目前已经有输出了,你应该学会自己怎么通过查看输入输出去调试自己的程序
作者: letitgo1998    时间: 2020-4-5 12:13
liudy02 发表于 2020-4-5 11:54
不知道你的全部代码,也不知道你读入的是干什么……
很抱歉,我精力有限,无法帮你详细回答
不过,我觉得 ...

十分感谢
作者: liudy02    时间: 2020-4-5 13:37
letitgo1998 发表于 2020-4-5 12:13
十分感谢

回头看了一眼你的代码,发现你的read语句没有给格式,这恐怕会带来问题
默认格式也是要有的,你先修复这个试试吧
只有在读二进制数据的时候,才不需要也不能用格式
作者: letitgo1998    时间: 2020-4-5 15:42
liudy02 发表于 2020-4-5 13:37
回头看了一眼你的代码,发现你的read语句没有给格式,这恐怕会带来问题
默认格式也是要有的,你先修复这 ...

好的 我目前是运行成功了 其实我刚接触fortran 都不知道怎么给格式....
作者: wzjdse    时间: 2020-8-20 15:35
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文件的行数了,和命令对应没错
作者: liudy02    时间: 2020-8-22 00:53
本帖最后由 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文件了,按理应该会重新从第一行读呀
估计你在程序的其他地方对文件操作了吧。





欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2