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

File io Fortran将文件读入数组-转置维度,file-io,io,fortran,File Io,Io,Fortran,我正试图在Fortran程序中将一个文件读入内存。该文件有N行,每行有两个值。这就是我目前所做的(它编译并运行,但给我的输出不正确): 我希望得到的是加载到变量cs中的数据,行作为第一个索引,列作为第二个索引,但是当上面的代码运行时,它首先给出一个带有两个“左列”值的行,然后是一个带有两个“右列”值的行,然后是一个带有下两个“左列值”的行,依此类推 以下是对情况的更直观的描述: In my data file: Desired output: Actual output

我正试图在Fortran程序中将一个文件读入内存。该文件有
N
行,每行有两个值。这就是我目前所做的(它编译并运行,但给我的输出不正确):

我希望得到的是加载到变量
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
时切换索引,但结果相同(或segfault,取决于我是否在print语句中切换索引)。我也尝试过逐行读取值,但由于数据文件的格式不规则(逗号分隔,不对齐列),我根本无法做到这一点


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

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

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

否则,如果您在一个命令中读取整个数组,它将按列的主要顺序读取,即,
cs(1,1),cs(2,1)。谢谢关于输入文件中的逗号,它们在实际文件中,但在示例中,我只想可视化元素的顺序,并对它为什么会在不起作用时这样做进行解释进行表决。先生,给你更多的机会!=)对于这篇文章的未来读者:我想将read概括为一个子程序,它只接受文件名和要读取的行数和列数,并最终得到以下隐式do构造:
read(f,*)((cs(row,col),col=1,Ncols),row=1,Nrows)
。请注意,由于@Vladimir F在上述答案中提到的原因,列必须位于内部循环中。
do i=1,N
    read (*,*) cs(i,1), cs(i,2)
enddo