如何使用fortran读取不规则行

Posted

技术标签:

【中文标题】如何使用fortran读取不规则行【英文标题】:How to use fortran to read irregular lines 【发布时间】:2012-05-26 13:48:23 【问题描述】:

我有一个格式如下的文本文件:

1  2 
3  4  5
6  7    

多行以此类推。

我运行这个 fortran 程序:

i=1
tt=1
do while(.true.)
  read(unit=1,*,iosTAT=status) lon(i,tt),lat(i,tt),h(i,tt)
  i=i+1
  if(status/=0)exit
enddo

我想将同一行中的三个数字分配给lonlath。但是,由于第一行没有第三个元素,程序会读取第二行的第一个元素(即 3 到 h(i,tt)),这不是我想要的。我想要在某些行中将 h(i,tt) 设置为缺失值

我该怎么做?

【问题讨论】:

你能不能一次读取一行并将每个值解析成适当的结构 也许你可以看看this问题的答案。 这些类似的问题可能会有所帮助:***.com/questions/10259712/… 和 ***.com/questions/7314216/… 【参考方案1】:

对于您的具体示例,您可以尝试以下操作:

program test

  integer :: status, i, tt
  character(len=100) :: line
  integer :: lon(3, 1), lat(3, 1), h(3, 1)

  lon(:, :) = 0
  lat(:, :) = 0
  h(:, :) = 0

  open(unit=1, file='data.txt')
  i=1
  tt=1
  do

     read(1, '(A100)', iostat=status) line
     if(status/=0) exit

     read(line, *, iostat=status) lon(i, tt), lat(i, tt), h(i, tt)

     if(status/=0) then
        read(line, *) lon(i, tt), lat(i, tt)
        h(i, tt) = 1  ! default value
     end if

     i = i + 1

  end do

  print *, 'lon=', lon
  print *, 'lat=', lat
  print *, 'h=', h

end program test

返回

lon=           1           3           6
lat=           2           4           7
h=           1           5           1

【讨论】:

以上是关于如何使用fortran读取不规则行的主要内容,如果未能解决你的问题,请参考以下文章

fortran 字符串太长 如何换行

fortran读取一行数据

如何在 Fortran 程序中读取 .raw 文件?

如何在fortran中的特定行写入

如何在 Fortran 90 中跳过带有“#”符号的行? [复制]

在 Fortran 中逐行读取逗号分隔的文本文件