所以我有一些代码基本上可以做到这一点:
REAL, DIMENSION(31) :: month_data
INTEGER :: no_days
no_days = get_no_days()
month_data = [fill array with some values]
WRITE(1000,*) (month_data(d), d=1,no_days)
所以我有一个每个月都有值的数组,在循环中,我根据该月有多少天用一定数量的值填充数组,然后将结果写到文件中。
我花了相当多的时间将头全部包裹在WRITE的“一次性编写数组”方面,但这似乎行得通。
但是,它以这种方式写出数组中的数字(例如,一月份为示例,因此为31个值):
0.00000 10.0000 20.0000 30.0000 40.0000 50.0000 60.0000
70.0000 80.0000 90.0000 100.000 110.000 120.000 130.000
140.000 150.000 160.000 170.000 180.000 190.000 200.000
210.000 220.000 230.000 240.000 250.000 260.000 270.000
280.000 290.000 300.000
因此,它给很多空格加上前缀(即使数组中有更大的值,也可能使列对齐),并且包装行以使其不超过特定宽度(我认为128个字符?不确定)。
我真的不介意多余的空间(尽管它们会大大增加我的文件大小,所以也可以解决这个问题……),但是分手线却搞砸了我的其他工具。我曾尝试阅读几本Fortran手册,但是尽管其中一些提到“输出格式”,但我还没有找到提到换行符或列的手册。
那么,在Fortran中使用上述语法时,如何控制如何写出数组?
(另外,当我们使用它时,如何控制十进制数字的nr?我知道这些都是整数值,所以我想将所有的小数点都省略掉,但是我不能更改出于某种原因,在我的代码中将数据类型设置为INTEGER。
答案 0 :(得分:3)
您可能想要类似的东西
WRITE(1000,'(31(F6.0,1X))') (month_data(d), d=1,no_days)
说明:
*
作为格式规范称为列表定向I / O:易于编码,但是您将对格式的所有控制权都交给了处理器。为了控制格式,您需要通过FORMAT
语句的标签或字符变量提供显式格式。F
编辑描述符用于十进制形式的实变量。它们的语法为F w 。 d ,其中 w 是字段的宽度, d 是字段的数量小数位,包括小数点。 F6.0
因此表示一个6个字符的宽度的字段,没有小数位。X
控件编辑描述符添加空格。(
... )
创建组,并且如果前面有许多重复,则可以重复。31
重复30或28天的数据。此外,
可以使用/
控件编辑描述符添加新行;例如,如果您要打印每行10个值的数据,则可以
WRITE(1000,'(4(10(F6.0,:,1X),/))') (month_data(d), d=1,no_days)
请注意第二个示例中的:
控件编辑描述符:它指示,如果没有更多要打印的项目,则不应该打印其他任何内容-甚至不包含与控件编辑描述符相对应的空格,例如X
或/
。尽管可以在前面的示例中使用它,但在此处更相关,以确保如果no_days
是10
的倍数,则三行之后没有空行数据。
如果要完全删除小数点符号,则需要使用nint
内在函数和I w (整数)描述符打印最接近的整数:< / p>
WRITE(1000,'(31(I6,1X))') (nint(month_data(d)), d=1,no_days)