私はFortranを初めて使用し、不規則なスペース/不規則に区切られたデータの配列(1876列x 3126行)を含むテキストファイル(.dat)を読み取って、新しいファイルに書き込むことができるコードを作成する必要があります。一貫したフォーマットで。つまり、データの列を互いに揃えたいのです。
元:
<4 spaces> 0.2341 15.0769 <2 spaces> -10.0672 1.6278 <3 spaces> 66.9851 -14.7123 <3 spaces> -0.4468 -2.5673
上記の例は、基本的に、データの列がどのように見えるかを示しており、各値の前に対応する数のスペースがあります。値の形式は「f10.4」です。
これが私が書いてみたコードです。コードをコンパイルしてexeファイルを実行できましたが、テキストファイルからの読み取りに失敗し、ランタイムエラー(ファイルの終わり)が発生しました。
program refgrid
implicit none
integer :: nrow, ncol
integer :: i, j
real, dimension(:,:), allocatable :: mat
print *, ' Input number of rows: '
read *, nrow
print *, 'Input number of columns: '
read *, ncol
allocate(mat(1:ncol,1:nrow))
open(UNIT=1, FILE='bathymetry2.dat', FORM='FORMATTED', STATUS='OLD', ACTION='READ')
do i=1, nrow
read(UNIT=1, FMT=*) mat
end do
close(UNIT=1)
open(UNIT=1, FILE='refgrid.dat', FORM='FORMATTED', STATUS='NEW', ACTION='WRITE')
do i=1, nrow
write(UNIT=1, FMT=101) mat
101 format(1826f10.4)
enddo
close(UNIT=1)
end program refgrid
私の質問:
doループを使用して行から値を連続して読み取るにはどうすればよいですか?'do'ループでf形式の繰り返し機能を使用することに少し混乱しています。
配列「mat」を配列全体として読み取り/書き込みできますか?または読み取り/書き込み用にdata_listを割り当てるにはどうすればよいですか?個々の要素ではなく、マトリックス全体を割り当てることはできますか?
この件に関して何か助けていただければ幸いです。ありがとうございました!