格式化输出会在一条记录中维护当前位置。T按列号定位,X/TL/TR相对当前位置移动,斜杠则结束当前记录并从下一行继续。
移动规则
- Tn直接定位到当前记录的第n列,与此前写入了多少字符无关。
- nX与TRn都从当前位置向右移动n列;TLn从当前位置向左移动n列。
- /开始一条新记录,终端输出时通常表现为换行。
本文代码
! X、T、TL、TR和斜杠控制记录中的位置与换行。
program formatPositioningDemo
implicit none
print "(A)", "12345678901234567890"
print "(T2,A,T12,A)", "left", "right"
print "(A,3X,A,TR2,A)", "A", "B", "C"
print "(T10,A,TL9,A)", "B", "A"
print "(A,/,A)", "first line", "second line"
end program formatPositioningDemo
编译运行
(base) hong@hongdeMacBook-Pro 038.formatPositioning % gfortran -Wall -Wextra -std=f2018 exampleFormatPositioning.f90
(base) hong@hongdeMacBook-Pro 038.formatPositioning % ./a.out
12345678901234567890
left right
A B C
A B
first line
second line
现象分析
第一行是列号标尺。下一行中,T2把left放在第2列;随后T12直接把right放到第12列。
第三行先写A,3X向右跳过3列后写B,TR2再向右移动2列后写C。两种描述符都执行相对右移。
第四行先用T10在第10列写B;写完后当前位置来到第11列,TL9退回第2列写A。最后一条格式中的斜杠使一次print产生两条记录。
核心知识点
- Tn使用从1开始的绝对列号;nX/TLn/TRn使用相对移动量。
- nX和TRn都向右移动,TLn向左移动。
- 斜杠切换输出记录,可以让一个格式生成多行内容。