0

Fortran 90のプログラムで読みたい.datファイルがあります。データファイルには、複素数の非常に長い列が1つだけ含まれています。私の問題は、列の一部だけを読み取りたいということです。たとえば、n番目からm番目までの要素のみを読み取り、そこから1次元配列を作成します。しかし、私が次のようなものを書くと

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)

/編集記述子を使用して、最初のループを 1 つの read ステートメントに圧縮することもできます。

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

(これはn-2、編集記述子が原因で<nm2>/レコードがスキップされており、1 つのレコードがダミー読み取りによってスキップされていることです)

フォーマット拡張子をサポートしていないコンパイラでは<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 に答える