【发布时间】:2013-03-21 14:49:48
【问题描述】:
我是 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 用于读/写?我可以分配整个矩阵而不是 单个元素?
我将非常感谢您对此事的任何帮助。谢谢!
【问题讨论】:
标签: arrays string datagrid text-files fortran95