Fortran Coder

查看: 36961|回复: 21
打印 上一主题 下一主题

[文件读写] abaqus调用fortran子程序读取txt文件报错forrtl: severe (24)

[复制链接]

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
跳转到指定楼层
楼主
发表于 2020-8-19 22:10:55 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
各位大佬,我想请教一下,我在用abaqus调用fortran子程序做分析,提示错误:forrtl: severe (24): end-of-file during read, unit 11, file D:\temp\xdata.txt。在网上查网友说是对同一个txt多次读取,后来我就改了一下程序,设置只读一次。如下为代码:但改完依然报同样的错误
[Fortran] 纯文本查看 复制代码
if (stepTime==0) then
          
          !读入轴承力Fx数据
          open(11,file='D:\temp\xdata.txt',status='old')
          do ix=1,10001
              read(11,*)Fxm(ix,1),Fxm(ix,2)    !循环写入
          end do
      
          !读入轴承力Fy数据
          open(11,file='D:\temp\ydata.txt',status='old')
          do iy=1,10001
              read(11,*)Fym(iy,1),Fym(iy,2)    !循环写入
          end do
          
      end if

根据本论坛的一个贴又做了如下修改:

[Fortran] 纯文本查看 复制代码
!只读入一次
      if (stepTime.eq.0) then
          
          !读入轴承力Fx数据
          do ix=1,10001
              open(11,file='D:\temp\xdata.txt',ioStat=krl,
     &        action="readwrite",status="old")
              if(krl==0) then
                  read(11,*)Fxm(ix,1),Fxm(ix,2)    !循环写入
                  close(11)
              end if
          end do
      
          !读入轴承力Fy数据
          do iy=1,10001
              open(11,file='D:\temp\ydata.txt',ioStat=krl,
     &        action="readwrite",status="old")
              if(krl==0) then
                  read(11,*)Fym(iy,1),Fym(iy,2)    !循环写入
                  close(11)
              end if
          end do
          
      end if



报错信息改变为:forrtl: severe (29): file not found, unit 11, file C:\Users\WANGZI~1\AppData\Local\Temp\WangZijia_Housing_15704\fort.11

请教各位大神,我原本以为读取txt很简单,没成想在这卡了好久了




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

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
22#
 楼主| 发表于 2020-8-21 15:13:52 | 只看该作者
chiangtp 发表于 2020-8-21 12:46
[Fortran] 纯文本查看 复制代码
  ! Case [A]                                                
  READ(55,*)  ...[/quote]

如果是caseA,而txt文件有5reals,但是声明的数组是2reals。读的时候按照如下代码读:
[mw_shl_code=fortran,true]READ(55,*) (Fxm(i,1), Fxm(i,2) , i=1,10001)


是不是其余3reals的数据就不会被读到,实际的读到的只有前2reals。还是说会按照,定义列数自动切换行,到时候保存的数组是2reals但是行数超过10001,这样子

130

帖子

10

主题

0

精华

大师

F 币
617 元
贡献
372 点

贡献勋章管理勋章帅哥勋章元老勋章星光勋章规矩勋章

21#
发表于 2020-8-21 12:46:12 | 只看该作者
[Fortran] 纯文本查看 复制代码
  ! Case [A]                                                
  READ(55,*) (Fxm(i,1), Fxm(i,2) , i=1,10001)               
                                                            
  ! Case [B]                                                
  DO i = 10001                                              
    READ(55,*) Fxm(i,1), Fxm(i,2)                           
  END DO                                                    
                                                            
  ! Case [C]                                                
  DO i = 10001                                              
    READ(55,*) tmp, Fxm(i,1), tmp, Fxm(i,2)                 
  END DO                                                    


0. Fortran Standard,  Default, 每做完一次 READ/WRITE, 就會自動 New Line, 除非是 Formatted Format 且有 ADVANCE='NO' 控制

1. Case [A]: 一次讀入 連續10001*2個 REALs (目前line到底了自動newline, READ做完後newline): 不論 (1, and/or , 2, and/or, 5, and/or, 10, ...)個REALs per line
    Case [B]: 一次讀2個 REALs (READ做完後newline), Loop 10001回: 如果不是嚴謹的2 REALs pe line, 至少有10001 lines, 就 掰掰了
    Case [C]: DataFile : >=4 REALs per line, 只想要 第2 及 第4 個REALs

2. DataFile如果是完美的 10001 lines, 2 REALs per line: Cases[A] ==Case[B], Case[B]可以的Case[A]一定可以
    Case[A]OK, Case[B] Fail,  就表示 DataFile不是完美的 10001 lines, 2 REALs per line, ---> [#7]


3. SAVE/只讀一次 很好的coding ,   or,   Case[A] only one READ, Case[B] 10001回READ,    其效率的差異是感受不到的
    (a) 資料量太少了,  0.001秒與0.01秒的感受
    (b) I/O一次 開門關門一次 是很耗時的, 當然編譯器會 很有效率地去做 白紙黑字Case[B]所要求的

4. 總結一下: 不是 Re-Open, 子程序裡SAVE有其功能, DataFile不是完美的 10001 lines, 2 REALs per line?

213

帖子

2

主题

0

精华

宗师

F 币
2142 元
贡献
875 点

规矩勋章

20#
发表于 2020-8-21 11:01:32 | 只看该作者
用下面的程序读txt文件, 看看是否有错。

[Fortran] 纯文本查看 复制代码
program test
   implicit none
   integer, parameter :: rk=8
   integer :: i
   real(kind=rk) :: x(10001),y(10001)

   open(11, file="xtxt.txt")
   do i=1, 10001
       read(11,*) x(i), y(i)
       write(*,*) x(i), y(i)
   end do
end program test


16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
19#
 楼主| 发表于 2020-8-21 09:41:29 | 只看该作者
chiangtp 发表于 2020-8-20 18:19
1. 如果save的数组太大,会不会出现我这个错误 (像我的这个数组10001*2,这么大的): 不會的

2. SAVE/只讀 ...

非常感谢您,回答很专业,第三点:
[Fortran] 纯文本查看 复制代码
      open(22,file='D:\temp\ydata.txt',status='old')
      read(22,*)(Fym(iy,1),Fym(iy,2),iy=1,2001)
      close(22)

这样改就解决问题了。

我还想请教一下第二点:SAVE/只讀一次, 很好的coding (於此, 效率是感受不到的)。我不太理解什么意思,是说只读一次效率比较低吗

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
18#
 楼主| 发表于 2020-8-21 09:17:28 | 只看该作者
chiangtp 发表于 2020-8-20 18:19
1. 如果save的数组太大,会不会出现我这个错误 (像我的这个数组10001*2,这么大的): 不會的

2. SAVE/只讀 ...

您好,下面这句代码:
[Fortran] 纯文本查看 复制代码
READ(55,*) (Fxm(ix,1),Fxm(ix,2), ix=1,10001)

报错了,错误信息: error #8093: A do-variable within a DO body shall not appear in a variable definition context。显示do的变量不能存在于循环体中。
还是说您的意思是:
[Fortran] 纯文本查看 复制代码
open(22,file='D:\temp\ydata.txt',status='old')
read(22,*)(Fym(iy,1),Fym(iy,2),iy=1,2001)
close(22)

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
17#
 楼主| 发表于 2020-8-21 09:00:44 | 只看该作者
风平老涡 发表于 2020-8-20 23:54
是否编一个小程序,只读这个txt文件

我试了一下,是不是子程序没法再调用另一个子程序? 所以我就直接在子程序里写的读txt的代码,没有单独写一个子程序去读txt

16

帖子

1

主题

0

精华

入门

F 币
73 元
贡献
36 点
16#
 楼主| 发表于 2020-8-21 08:55:15 | 只看该作者
风平老涡 发表于 2020-8-21 03:45
这个txt文件是由abaqus产生的吧,原先的format是什么?

您好,这个txt是之前就有的(拿matlab算出的力的数据),所以我想在最初的时候读入进来

213

帖子

2

主题

0

精华

宗师

F 币
2142 元
贡献
875 点

规矩勋章

15#
发表于 2020-8-21 03:45:10 | 只看该作者
本帖最后由 风平老涡 于 2020-8-20 16:36 编辑
wzjdse 发表于 2020-8-19 19:42
我的txt就是10001行,两列,如下:
0.000000        19476.300000        
0.000100        19475.066748        

这个txt文件是由abaqus产生的吧,原先的format是什么?

213

帖子

2

主题

0

精华

宗师

F 币
2142 元
贡献
875 点

规矩勋章

14#
发表于 2020-8-20 23:54:01 | 只看该作者
本帖最后由 风平老涡 于 2020-8-20 16:33 编辑
wzjdse 发表于 2020-8-19 19:42
我的txt就是10001行,两列,如下:
0.000000        19476.300000        
0.000100        19475.066748        

是否编一个小程序,只读这个txt文件

您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

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

GMT+8, 2024-12-22 19:19

Powered by Tencent X3.4

© 2013-2024 Tencent

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