科学计算常按相同布局连续输出多组测量值。把布局定义为带标签的FORMAT语句,多条输入输出语句便可引用同一格式,避免重复书写编辑描述符。format适合生成结构固定的计算结果表、迭代过程记录或批量测量报告,尤其适用于多处输出必须统一列宽、数值精度和单位的场景。
语法结构
write (unit, label) output_list
label format (edit_descriptor_list)
- label是1到5位数字组成的语句标签,其作用范围限于当前程序单元。
- FORMAT语句不可执行,只保存格式说明;程序执行到它所在的位置时不会产生输出。
- 多条输入输出语句可以引用同一标签。修改该FORMAT语句后,所有引用处都会采用新布局。
本文代码
! 多条输出语句可以引用同一个FORMAT语句,共享固定布局。
program formatStatementDemo
implicit none
integer :: channelId
real :: voltage
channelId = 1
voltage = 3.3
write (*, 100) channelId, voltage
channelId = 12
voltage = 12.345
write (*, 100) channelId, voltage
100 format ("通道", I2, ":", 1X, F6.2, 1X, "V")
end program formatStatementDemo
编译运行
(base) hong@hongdeMacBook-Pro 041.formatStatement % gfortran -Wall -Wextra -std=f2018 exampleFormatStatement.f90
(base) hong@hongdeMacBook-Pro 041.formatStatement % ./a.out
通道 1: 3.30 V
通道12: 12.35 V
现象分析
两条write语句都用100引用同一个FORMAT语句,因此两组测量值具有完全相同的列宽、精度和单位。I2让通道编号占2列,F6.2让电压占6列并保留2位小数,于是位数不同的数据仍能纵向对齐。
标签100不是输出单元号:星号表示标准输出,100只负责找到格式。若要为所有记录增加单位、调整列宽或改变小数位数,只需修改标签100处,不必逐一修改两条write语句。
核心知识点
- FORMAT语句把可复用的固定布局与具体输出操作分开。
- 语句标签标识格式,输出单元决定数据写到哪里,两者含义不同。
- 重复输出同类记录时适合使用标签格式;只使用一次的简单格式通常直接内联更容易阅读。