在FORTRAN 95中读取Rank 2数组

时间:2016-04-20 00:53:09

标签: arrays fortran

我想从文本文件中读取数组 看起来像这样

1   88  90  94  102 111 122 134
2   75  77  80   86  94 103 113
3   80  83  85   94 100 111 121 
4   68  71  76   85  96 110 125
5   77  84  91   98 105 112 119
6   81  85  90   96 102 109 120

(以上数据为6乘8矩阵,间隔均匀,可能无法正确显示

我的代码

program cool
implicit none
integer:: ok(6,8),k,i
open(unit = 1, file = "a.txt")
read(1,*) ok
Write(*,*) ok
print*,ok_1(4,3)
end program cool

我遇到的问题是确定(4,3)与71(第4行,第3列)不对应

我试过读过像这样的文件 读(单位= 1,10)好 10格式(8(i4))

!我尝试过这个

的变种

我尝试的任何方式,调用ok(i,j)并不符合我需要的值

我需要这个来查找包含第一列的行平均值和列平均值。只要我能得到正确的值,这就是Do循环这很简单,我不能

编辑:: 我也试图在我的程序中硬编码数组 ok =重塑((/ 1,88,90,94,102,111,122,134,& 2,75,77,80,86,94,103,113,& 3,80,83,85,94,100,111,121,& 4,68,71,76,85,96,110,125,& 5,77,84,91,98,105,112,119,& 6,81,85,90,96,102,109,120 /),(/ 6,8 /))但是这似乎也没有使得对应以及(4,4)返回100而不是76

1 个答案:

答案 0 :(得分:2)

Fortran以 column-major 顺序将其数组存储在内存中,因此元素ok(1,1)后跟元素ok(2,1), ok(3,1), ...,依此类推。方便的陈述

read(1,*) ok

按顺序将数字读入数组。在同一个元素列表上使用reshape会产生相同的数组。

也许您认为数组将存储在 row-major 顺序中,ok(1,1), ok(1,2), ok(1,3), ...

您可以逐行读取文件,例如

do ix = 1, 6
   read(1,*) ok(ix,:)
end do

或将文件一次性读入8*6临时数组并转置它。或者您可以重新排序文件中的元素。