我会尝试在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”时切换索引,但结果相同(或者是段错误,具体取决于我是否在打印语句中也切换索引)。我还尝试按行读取值,但由于数据文件的格式不规则(逗号分隔,而不是列对齐),因此我根本无法使其工作。
为了实现我想要的结果,我应该如何最佳方式将数据读入内存?
read(f, *) ((cs(row,col),col=1,Ncols),row=1,Nrows)
。请注意,由于 @Vladimir F 在上面的回答中提到的原因,列必须在内部循环中。 - Tomas Aschan