Tom*_*han 8 io file-io fortran
我正在尝试将文件读入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
Run Code Online (Sandbox Code Playgroud)
我希望得到的是加载到变量中的数据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
Run Code Online (Sandbox Code Playgroud)
我已经尝试在分配时切换索引cs,但是具有相同的结果(或段错误,取决于我还在print语句处切换索引).我也尝试逐行读取值,但由于数据文件的格式不规则(以逗号分隔,而不是列对齐),我根本无法使用它.
如何将数据读入内存中以实现我想要的结果的最佳方式?
我在您的数据文件中看不到任何逗号.无论如何,它不应该与列表导向输入有任何区别.试着像你写的那样阅读它.
do i=1,N
read (*,*) cs(i,1), cs(i,2)
enddo
Run Code Online (Sandbox Code Playgroud)
否则,如果您在一个命令中读取整个数组,它将按列主顺序读取它,即,cs(1,1), cs(2, 1), ....cs(N,1), cs(1, 2), cs(2,2), ...这是数组存储在内存中的顺序.
| 归档时间: |
|
| 查看次数: |
18660 次 |
| 最近记录: |