【发布时间】:2014-08-09 18:45:37
【问题描述】:
我正在尝试使用下面的代码来读取格式化文件并将其写入另一个文件。但是,在运行时它显示以下错误
$ ./conv.sac.farm < i_conv.farm
# stn comp Delta Tr-time Start in record
At line 54 of file Main/conv.sac.farm.f (unit = 5, file = 'stdin')
Fortran runtime error: Bad real number in item 1 of list input
源码如下
PARAMETER (nd0=100000,pi=3.1415926)
IMPLICIT COMPLEX*8 (Z)
CHARACTER name*6,comp*6,fname*60,event*20
- ,cmp(0:3)*5,fname0*60,charac*15,scode*60
REAL*8 GFACT(500),PP0(500),depth0
integer hr0,mnu0,yr,month,day,hr,mnu
REAL x(nd0),y(nd0)
DIMENSION Z(nd0),zpole(50),zero(50)
data np,cmp/8,'disp.','vel. ','acc. ','orig.'/
common /tbl/ip(110,14),is(110,14),secp(110,14),secs(110,14)
read(5,'(a)') event
read(5,*) alats,alons,depth,hr0,mnu0,sec0,id,delmin,delmax
depth0=depth
write(22,'(a,a5,3f7.2,2i3,f6.2)')
# event,cmp(id),alats,alons,depth,hr0,mnu0,sec0
* << J-B travel time table >>
OPEN(11,FILE='jb.ptime')
OPEN(12,FILE='jb.stime')
1000 read(11,*,end=1001) n,(ip(n,i),secp(n,i),i=1,14)
goto 1000
1001 read(12,*,end=1002) n,(is(n,i),secs(n,i),i=1,14)
goto 1001
1002 continue
close(11)
close(12)
* << Geometrical factor >>
OPEN(15,FILE='jb.table')
CALL GEOM(GFACT,PP0,depth0)
close(15)
nstn=0
print *,' # stn comp Delta Tr-time Start in record'
5 read(5,'(a)') fname
read(5,'(a)') scode
* ta=advance of start-time relative the standard P/S arrival
* du=duration
c
if(fname.eq.'dummy') goto 90
read(5,*) ta,du,dt,f1,f2,iph,nr,iuni
open(1,file=fname)
READ(1,'(g15.7)') dt0
read(1,'(/////5g15.7)') dum, alat, alon, elev
read(1,'(///////5i10)') yr, nday, hr,mnu, nsec
read(1,'(5i10)') nmsec,ndum,ndum,ndum,nd
read(1,'(/////)')
read(1,'(a6,2x,a13)') name,charac
read(1,'(////)')
等等..
第 54 行是
read(5,*) ta,du,dt,f1,f2,iph,nr,iuni
我在这个链接之后发现了一个类似的问题
Fortran runtime error: Bad real number
但是,如果我理解正确,所提到的更正与读取未格式化的数据有关。尽管如此,鉴于我尝试读取的文件已格式化,我尝试并按预期失败了。
【问题讨论】:
-
你想读什么?可以给我们
i_conv.farm的对应行吗? -
使用我惊人的跨时间和空间调试能力,我猜想输入文件的第一行包含列标题,而不是任何可以解释为实数的内容。如果你想从没有我惊人力量的小众生那里得到帮助,请按照@AlexanderVogt 的建议。
-
还要在数据中查找 NaN 或 ****** 或其他垃圾。顺便说一下,链接的问题只是令人困惑,应该忽略。
-
我同意@HighPerformanceMark。列标题可能是您的问题,如果是这种情况,输入
read(5,*)来吃标题行可以解决您的问题。但是,如果没有看到输入文件,就不能肯定地说。
标签: fortran