0

我有一个 .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 的元素。有什么办法可以做我想做的事吗?

4

1 回答 1

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
于 2012-08-20T09:26:52.087 回答