fortran,读命令

时间:2012-08-20 08:06:41

标签: fortran90

我有一个.dat文件,我想用Fortran 90中的程序读取。数据文件只包含一个很长的复数列。我的问题是我只想读取列的一部分,例如,仅从第n个到第m个元素包括,并从中创建一维数组。但是,如果我写了类似

的内容
open(unit = 100, file = 'datafile.dat', status = 'old', action = 'read')
do j = n,m
       read(100,*) vec(j-n+1)
    end do
close(100)

程序读取我文件中的第一个m-n + 1个元素,而不是从n到m的元素。有什么办法可以做我想要的吗?

1 个答案:

答案 0 :(得分:1)

嗯,有一个明显的解决方案 - 您可以在读取实际数据之前简单地执行n-1虚拟读取:

open(unit = 100, file = 'datafile.dat', status = 'old', action = 'read')
do j = 1,n-1
   read(100,*)
end do
do j = n,m
   read(100,*) vec(j-n+1)
end do
close(100)

您还可以使用/编辑描述符并将第一个循环压缩为单个读取语句:

nm2 = n-2
read(100,'(<nm2>/)')
do j = n,m
   read(100,*) vec(j-n+1)
end do

(由于n-2编辑描述符而跳过<nm2>/个记录,虚拟读取跳过了一条记录)

对于不支持<x>格式扩展的编译器,您可以在内部文件中构造格式描述符:

character(len=20) :: fmt

write(fmt, "('(',I0,'/)')") n-2
read(100,fmt)
do j = n,m
   read(100,*) vec(j-n+1)
end do