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