fortran教程7:输入输出
阿里云国内75折 回扣 微信号:monov8 |
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6 |
文章目录
前情提要
fortran
的输入输出函数有三种即read, print, write
其标准调用方式如下其中fmt
表示输入输出的字符格式如果不想设置可以记作*
前几节一直调用的print *,
就是这种情况。
print fmt, variable_list
read fmt, variable_list
write fmt, variable_list
为了便于理解这里先用print
作为示例等到后面介绍文件读写的时候再用read, write
。
fmt
的本质是一段字符串例如
print "(f6.3)", 3.1415926
结果为3.142
其中f
表示浮点型下表列出fortran
所有的交互格式
类型 | 格式 |
---|---|
ingeger | ri w.m |
character | rA w |
real | rF w.d, rE w.d, rES w.d |
空 | 空格nX 空行/ |
其中个参数含义为i
表示整数F
表示浮点数E
, ES
表示科学计数法。其他数字表示
d
右侧的小数位数m
要显示的最小位数n
跳过的空格数r
左侧空格w
字段宽度
一般当字符宽度w
不足以打印设置格式的长度时会返回长为w
的星号例如
program printPi
pi = 3.141592653589793238
print "(f6.3)", pi
print "(f4.3)", pi
print "(f10.7)", pi
print "(f20.15)", pi
print "(e16.4)", pi/100
end program printPi
结果为
3.142
****
3.1415927
3.141592741012573
0.3142E-01
f4.3
表示保留3位小数的同时宽度为4这显然是不够的所以变成了4个星号。
f20.15
表示保留15位小数同时占据20个字符的宽度所以前面出现了3个空格。
打开文件
fortran
用open
打开文件其参数列表如下
unit
取值为0-999的数字作为文件的标识符每个标识符只能对应一个文件file
文件名为字符串ioStat
I/O状态为整型err
错误status
默认为'unknown'
若为new
表示该文件不存在old
表示该文件已存在replace
表示覆盖原本的文件'scratch’表示创建临时文件不需要文件名access
默认"sequential"
表示顺序读写若设为'direct'
则可指定任意位置读写form
'formatted'
表示存为文本文件unformatted
表示存为二进制recl
文件字节长度
其中unit
和file
为必选参数。
在对文件内容执行完操作后通过close(unit)
来关闭文件。
program fileTest
implicit none
real, dimension(100) :: x, y
integer :: i
do i=1,100
x(i) = i * 0.1
y(i) = sin(x(i))
end do
open(1, file = 'test.txt', status = 'new')
do i=1,100
write(1,*) x(i), y(i)
end do
close(1)
end program fileTest
在当前工作目录下出现test.txt
内容为
0.100000001 9.98334214E-02
0.200000003 0.198669329
0.300000012 0.295520216
...
文件读写
上面的案例中出现了write(1,*)
此即写入文件的方法其主要参数为write(unit, fmt)
其中unit
即文件标识符fmt
则与print
中的fmt
如出一辙表示写入格式如果将上面的写入代码改为
write(1,"f4.2") x(i)
则其内容变为
0.10
0.20
0.30
...
所以这里就出现了一个问题fmt
貌似只能对单个写入进行格式化。
但作为经典编程语言这个bug还是很容易解决的只需外挂格式将write
这行改写为
write(1,100) x(i), y(i)
100 FORMAT(' ' , f6.2, 2f8.4)
效果为
0.10 0.0998
0.20 0.1987
0.30 0.2955
0.40 0.3894
0.50 0.4794
...