具有未知列的格式语句

标签 format fortran

我正在尝试使用 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/

相关文章:

multithreading - 为什么说 "Don' t 同时格式化软盘的评论在谈论线程和进程时很有趣?

c++ - 网址通用格式

fortran - 在 Gfortran 中使用可选参数时接口(interface)不明确

makefile - 大型项目的 FORTRAN Makefile

c - 如何在c中使用fortran模块子程序

mysql - 如何在 View 中获取具有位格式的列?

html - 屏幕居中菜单

date - 如何使用 MapStruct 将日期字符串转换为另一种格式?

fortran - gdb 中 pretty-print Fortran 动态类型

scope - 为什么类型不可访问?