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