2

我正在尝试读取如下所示的 .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到数组中。我用它来识别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而不是。*我检查了变量声明和类型。我究竟做错了什么?有任何想法吗?或者可能是更好的阅读方式?

4

1 回答 1

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
于 2018-11-27T00:38:38.050 回答