格式化输出
使用格式化使得读取和写入的数据更加美观,Fortran的格式描述符使用"()"包围
常用格式描述符
| 格式类型 | 格式符 | 说明 | 
|---|---|---|
| 整数 | i | 需要加宽度,例如 i10,表示宽度是10 | 
| 浮点数 | f | 需要加宽度和小数点后位数,例如 f10.5,表示宽度是10,小数点后5位 | 
| 科学计数法 | es | 需要加宽度、小数点后位数和科学计数的指数,例如 es24.15e3,表示宽度是24,小数点后15位,指数3位 | 
| 字符 | A | 可以加宽度,例如 a3,标识宽度是3 | 
| 通用格式 | g0 | 输出时使用,适用于任意类型 | 
| 空格 | x | 输出一个空格 | 
Fortran支持在每个描述符的前面添加次数标记,例如10i3,20(f10.5,i10),这样就可以多层嵌套,组合出更多的格式。
同时可以使用*作为标记次数,此时表示的是能输出的最大次数
  write(*,"(i3)")123
  write(*,"(3f10.4)")[1.0,2.0,3.0]
  write(*,"(*(g0,1x)"))1.0,"hello",2 
- "(*(g0,1x)")和Fortran的默认输出- *看起来似乎是相同的功能。事实上不同的编译器对于- *的实现各不相同,例如- gfortran的输出中有大量的空格,- ifort,ifx在80个字符后会自动换行,使用这个格式就可以保证用最小的宽度输出。
如果格式的次数比后面需要输出的参数要少,那此时会自动换行
  real::a(3,3)
  write(*,"(3f10.4)")a !此时输出的是一个3*3的矩阵形式
在默认格式*中,每个read会至少读取一行,所以一个空的read可以跳过当前行,一个非空的read可以跳过连续的空行,而read后如果是一个数组或者多个元素,则它会一直向后读取直到所有元素全部读取。
  !读取一个数组
  real::a(10,10)
  read(10,*)a  !文件中至少需要100个real型数字
- 建议在read的过程中尽量不要使用格式,因为它要求你的格式和你的文件内容完全符合,这样丧失了一定的灵活性。直接使用表控格式读取更加灵活。
- 在读取字符串的时候,默认会按照分隔符分割,此时使用格式A就可以读取一行中所有的字符read(10,"(A)"),使用"(A)"格式就可以解决我们上一节提到的空行的问题。
内部文件读写(数字和字符串互转)
write(*,*)和read(*,*)的第一个位置也可以填写字符串,用于数字和字符串的相互转换
character(len=10)::str
real::a
write(str,"(f10.2)")1.234
read(str,*)a
- 注意到Fortran的文件名是一个字符串,所以可以用内部文件读写来批量的生成文件名