我正在尝试使用 fortran 编写一个逗号分隔的文件,以便导入到另一个商业包中。问题是我的数据列数量未知。我的输出需要如下所示:
a_string,a_float,a_different_float,float_array_elem1,float_array_elem2,...,float_array_elemn
这会导致如下所示的结果:
L1080,546876.23,4325678.21,300.2,150.125,...,0.125
L1090,563245.1,2356345.21,27.1245,...,0.00983
我有三个问题。第一,我希望元素紧密分组(可变列宽),第二,我不知道如何在格式语句中定义可变数量的数组元素,第三,数组元素可以跨越很大的范围 -可能是12个数量级。下面的代码从概念上讲是我想要的,但是变量“n”和缺少列宽定义会引发错误(当然):
WRITE(50,900) linenames(ii),loc(ii,1:2),recon(ii,1:n)
900 FORMAT(A,',',F,',',F,n(',',F))
(我应该注意 n 在运行时是固定的。)当我执行 WRITE(50,*) 时,写入语句会执行我想要的操作,只不过它是宽度分隔的。
我认为这个帖子几乎回答了我的问题,但我很困惑:SO 。现在我有一个带有 awk 的 shell 脚本来解决这个问题,但是这个解决方案......不优雅。我可以进行一些操作以使输出成为字符串,然后将其写入,但如果可能的话,我宁愿避免该选项。
我在 Fortran 90 中执行此操作,但我喜欢尝试使我的代码尽可能向后兼容。
最佳答案
接近您想要的格式是 f0.3,这不会给出空格和固定的小数位数。我认为如果你还想去掉尾随零,你需要做很多工作。
写入语句中的“n”可以大于数据值的数量,因此一种(老派)方法是在那里放一个大数字,例如 100000。现代 Fortran 确实有一些语法来指定无限重复,我确信有人会提供这个。
----编辑 正如您可能猜到的那样,无限重复是一个星号..并且在 f2008 中显然是“全新的”
关于具有未知列的格式语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15118702/