我正在使用用 Fortran 编写的旧程序。程序中有一部分通过隐含的 do 循环将文件中的数据读取到二维数组中。该文件包含与维度为 nx x ny 的二维笛卡尔网格上的点相对应的数据。文件的格式是
900 FORMAT(6F10.6)
即6 列,格式为 10.6f,后跟换行符。因此该文件有 nx*ny/6 行。数据被读入二维数组,该数组已由
定义 DIMENSION A(NY,NX)
通过循环
OPEN (UNIT=33,STATUS=OLD)
DO 100 J=1,NX
READ(33,900) (A(I,J),I=1,NY)
100 CONTINUE
我的问题是,只有当行数 nx*ny/6 是整数时,这才有效。否则,在每次 ny 读取之后,隐含的 do 循环会跳过该行的其余部分并从下一行开始。因此,在数组被填充之前就到达了文件末尾并且
Fortran 运行时错误:文件结尾
被抛出。
我没有使用 Fortran 的经验,并通过一些打印语句诊断出此错误。在阅读了一些在线教程后,我还没有弄清楚如何更改读取循环以在不在行尾的情况下不跳过数据点。我将非常感激您的提示。
提前致谢。
每个新的 READ 操作符开始从新行读取数据。这就是为什么您的代码不能像您预期的那样正常工作的原因。
如果@lastchance 的解决方案
READ (33,*) A
有效 - 就可以了。如果没有,最简单的方法就是进行一个循环,直到文件结束或读取 nx*ny 数字。在每个循环迭代中,您将读取六个(或更少)数字并将它们放入相应的矩阵条目中。