gpt4 book ai didi

file-io - Fortran 将文件读入数组 - 转置维度

转载 作者:行者123 更新时间:2023-12-02 15:46:42 29 4
gpt4 key购买 nike

我正在尝试在 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时切换索引,但结果相同(或段错误,取决于我是否也在打印语句处切换索引)。我也尝试过逐行读取值,但由于数据文件的不规则格式(逗号分隔,不是列对齐),我根本无法正常工作。

如何以最佳方式将数据读入内存以获得我想要的结果?

最佳答案

我在您的数据文件中没有看到任何逗号。无论如何,它不应该与列表定向输入有任何区别。试着像写它一样去读它。

do i=1,N
read (*,*) cs(i,1), cs(i,2)
enddo

否则,如果您在一个命令中读取整个数组,它将按列优先顺序读取它,即 cs(1,1), cs(2, 1), ....cs(N,1 ), cs(1, 2), cs(2,2), ... 这是数组在内存中存储的顺序。

关于file-io - Fortran 将文件读入数组 - 转置维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15881858/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com