使用@,#和&跳过输入行

时间:2016-02-19 04:02:10

标签: fortran gfortran

我有一个数据文件,其中一些行以@,#和&开头。该文件还包含数值数据列。我只想要数值数据列。

那么如何编写Fortran程序来获取新数据,避免以特殊字符开头的行?

我尝试了帖子中提供的代码。但它只是读取数字数据的第一行而不是剩余的行。

@ target g0.s1         
@ type xysize
0.05966 -70.06945   0.07000
0.08949 -70.06946   0.07000
0.11932 -70.06946   0.07000
0.14915 -70.06946   0.07000
0.17898 -70.06946   0.07000
@ autoscale onread none
@ target g0.s2         `

代码

implicit none

integer, parameter :: iu = 10

real               :: x

integer            :: ierr

open (unit=iu,file="data.txt",action="read")

do

   read (iu,*,iostat=ierr) x

   if (ierr == 0) exit

end do

print*,"x =",x

end program xread_data

1 个答案:

答案 0 :(得分:1)

如果该行可以包含除数字之外的其他内容,则无法直接将其作为数字读取,只是必须失败。

首先,您应该将该行读作字符串。

然后你可以查看该行字符串中的第一个字符,如果是注释,则跳过该行。如果没有,请尝试从内部文件中读取字符串中的数字。

character(1024) :: line

open...

do
  read(iu, '(a)', iostat=ierr) line
  if (ierr/=0) exit

  if (line(1:1)=='@' .or.  line(1:1)=='#' .or. line(1:1)=='&') cycle

  read(line, iostat...) x1, x2, x3

end do

close...