首页 > 解决方案 > Fortran read 语句读取序列

问题描述

假设我有一个文件,每行包含一个数组索引,后跟数组值

i  array(i)

我可以天真地读入数据read(unit=10, *) i, array(i)吗?Fortran 是否总是i先读取然后使用此i值进行分配array(i)?某些read规范或编译器标志会影响行为吗?

标签: file-iofortrangfortran

解决方案


数据传输声明

read(unit=10,*) i, array(i)

是一个合法的,并且它的行为是所希望的:从记录中i首先读取值,然后该值用于标识数组的元素以array(i)读取第二个值。

这是 Fortran 规范的要求,例如使用 (Fortran 2018, 12.6.4.5.1):

确定输入/输出列表项指定哪些实体所需的所有值都在处理该项的开始时确定。

当然,尽管此数据传输语句可能有效,但这并不意味着它在您信任输入数据的最简单情况下都是可取的。特别是,在这个 read 语句期间不可能对边界进行任何检查。如果i读取的值对应于无效的数组元素规范,则程序被破坏。您可能只想使用数组元素的中间值来处理输入文件的潜在问题。


推荐阅读