我是 Fortran 的新手,我需要编写一个代码,允许我读取一个文本文件(.dat),其中包含不规则空格/不规则分隔的数据数组(1876 列 x 3126 行)并将其写入新文件具有一致的格式。简而言之,我希望数据的列相互对齐。
前任:
<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 进行读/写?我可以分配整个矩阵而不是单个元素吗?
对于此事,我将不胜感激。谢谢!