从文件读取期间Fortran运行时错误

时间:2018-11-08 18:20:25

标签: io fortran runtime-error

我正在尝试读取一个如下所示的.gro文件:

1coh      C    1   0.206  -0.049   0.429
1coh     O1    2   0.295   0.048   0.501
1coh     H3    3   0.252  -0.137   0.424
1coh     H4    4   0.186  -0.014   0.337

我需要将0.206-0.0490.429存储到数组中。 我用它来识别行中的coh

open(unit=20,file=grofile2)
   do i=1,3
      read(20,'(A)')line
      lname2=line(6:8)
   enddo
close(unit=20)

然后,使用以下命令读入特定行:

     open(unit=20,file=grofile2)
150  read(20,'(A)',end=151)line
     if(line(6:8).eq.lname2)then
        i=i+1
        lig2(i)=line
        write(*,*)lig2(i)
     endif
     goto 150
151  continue
     close(unit=20)
     natoms2=i

此处的write确实将行正确输出到终端。 然后,我跟随着:

do j=1,natoms2
   write(*,*) j
   write(*,*) lig2(j)
   read(lig2(j)(23:28),*)lig2x(j)
   read(lig2(j)(31:36),*)lig2y(j)
   read(lig2(j)(39:44),*)lig2z(j)
   write(*,*) lig2x(j),lig2y(j),lig2z(j)
enddo

将单个值读取到这些数组。

这时我得到了错误:

At line 145 of file samgen.f
Fortran runtime error: Bad real number in item 1 of list input

第145行是:read(lig2(j)(23:28),*)lig2x(j)

此语法已在其他程序中用于此文件,但在此处不起作用。我尝试在读取行中使用F6.3代替*。我已经检查了变量声明和类型。我究竟做错了什么?有任何想法吗?还是读起来更好的方法?

1 个答案:

答案 0 :(得分:0)

我以“ test.gro”文件为例。

1coh      C    1   0.206  -0.049   0.429
1coh     O1    2   0.295   0.048   0.501
1coh     H3    3   0.252  -0.137   0.424
1coh     H4    4   0.186  -0.014   0.337

“我需要将0.206,-0.049、0.429存储到数组中。”我不明白您的问题后面的内容。这个相当简单的代码可以满足您的需求吗?

program read
character :: char1*5, char2*3
integer :: i1
real :: r1, r2, r3

open (30, FILE='test.gro', STATUS='OLD')
    do i=1,4
    ! I would read without format specification: it is much easier
    ! though type of variable must be correct!
      read(30,*)  char1, char2, i1, r1, r2,r3 
         !test what I have read:
      print*, char1, char2, i1, r1, r2, r3 
    end do
close (30)
end program
相关问题