如何使用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
我想将同一行中的三个数字分配给lon
、lat
、h
。但是,由于第一行没有第三个元素,程序会读取第二行的第一个元素(即 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读取不规则行的主要内容,如果未能解决你的问题,请参考以下文章