我正在尝试在 Fortran 程序中将文件读入内存。该文件有N
行,每行有两个值。这是我目前所做的(它编译并运行,但给了我不正确的输出):
program readfromfile
implicit none
integer :: N, i, lines_in_file
real*8, allocatable :: cs(:,:)
N = lines_in_file('datafile.txt') ! a function I wrote, which works correctly
allocate(cs(N,2))
open(15, 'datafile.txt', status='old')
read(15,*) cs
do i=1,N
print *, cs(i,1), cs(i,2)
enddo
end
我希望得到的是加载到变量中的数据cs
,第一个索引为行,第二个索引为列,但是当上面的代码运行时,它首先打印一个带有两个“左列”值的行,然后是一个带有两个“右列”值,然后是接下来两个“左列值”的行,依此类推。
这是对情况的更直观的描述:
In my data file: Desired output: Actual output:
A1 B1 A1 B1 A1 A2
A2 B2 A2 B2 B1 B2
A3 B3 A3 B3 A3 A4
A4 B4 A4 B4 B3 B4
我尝试在分配时切换索引cs
,但结果相同(或段错误,取决于我是否也在 print 语句中切换索引)。我也尝试逐行读取值,但由于数据文件的格式不规则(逗号分隔,而不是列对齐),我根本无法让它工作。
如何以最佳方式将数据读入内存以达到我想要的结果?