- Fortran 教程
- Fortran - 首页
- Fortran - 概述
- Fortran - 环境设置
- Fortran - 基本语法
- Fortran - 数据类型
- Fortran - 变量
- Fortran - 常量
- Fortran - 运算符
- Fortran - 决策
- Fortran - 循环
- Fortran - 数字
- Fortran - 字符
- Fortran - 字符串
- Fortran - 数组
- Fortran - 动态数组
- Fortran - 派生数据类型
- Fortran - 指针
- Fortran - 基本输入输出
- Fortran - 文件输入输出
- Fortran - 过程
- Fortran - 模块
- Fortran - 本质函数
- Fortran - 数值精度
- Fortran - 程序库
- Fortran - 编程风格
- Fortran - 调试程序
- Fortran 资源
- Fortran - 快速指南
- Fortran - 有用资源
- Fortran - 讨论
Fortran - 文件输入输出
Fortran允许您从文件读取数据,并将数据写入文件。
在上一章中,您已经了解了如何从终端读取数据以及向终端写入数据。本章将学习Fortran提供的文件输入输出功能。
您可以读取和写入一个或多个文件。OPEN、WRITE、READ和CLOSE语句允许您实现此目的。
打开和关闭文件
在使用文件之前,必须先打开文件。使用**open**命令打开文件以进行读取或写入。该命令的最简单形式为:
open (unit = number, file = "name").
但是,open语句可能具有通用形式:
open (list-of-specifiers)
下表描述了最常用的说明符:
| 序号 | 说明符和描述 |
|---|---|
| 1 | [UNIT=] u 单元号 u 可以是9-99范围内的任何数字,它表示文件,您可以选择任何数字,但程序中每个打开的文件必须具有唯一的编号。 |
| 2 | IOSTAT= ios 它是I/O状态标识符,应为整型变量。如果open语句成功,则返回的ios值为零,否则为非零值。 |
| 3 | ERR = err 这是一个标签,在发生任何错误时,控制权将跳转到该标签。 |
| 4 | FILE = fname 文件名,一个字符字符串。 |
| 5 | STATUS = sta 它显示文件的先前状态。一个字符字符串,可以具有三个值之一:NEW、OLD或SCRATCH。临时文件在关闭或程序结束时创建并删除。 |
| 6 | ACCESS = acc 它是文件访问模式。可以具有两个值之一:SEQUENTIAL或DIRECT。默认为SEQUENTIAL。 |
| 7 | FORM = frm 它给出文件的格式状态。可以具有两个值之一:FORMATTED或UNFORMATTED。默认为UNFORMATTED。 |
| 8 | RECL = rl 它指定直接访问文件中每个记录的长度。 |
打开文件后,可以通过read和write语句访问它。完成后,应使用**close**语句关闭它。
close语句具有以下语法:
close ([UNIT = ]u[,IOSTAT = ios,ERR = err,STATUS = sta])
请注意,括号中的参数是可选的。
示例
此示例演示如何打开一个新文件以将一些数据写入文件。
program outputdata
implicit none
real, dimension(100) :: x, y
real, dimension(100) :: p, q
integer :: i
! data
do i=1,100
x(i) = i * 0.1
y(i) = sin(x(i)) * (1-cos(x(i)/3.0))
end do
! output data into a file
open(1, file = 'data1.dat', status = 'new')
do i=1,100
write(1,*) x(i), y(i)
end do
close(1)
end program outputdata
编译并执行上述代码后,它将创建文件data1.dat并将x和y数组值写入其中。然后关闭文件。
从文件读取和写入文件
read和write语句分别用于从文件读取和写入文件。
它们具有以下语法:
read ([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s) write([UNIT = ]u, [FMT = ]fmt, IOSTAT = ios, ERR = err, END = s)
上述表格中已经讨论了大多数说明符。
END = s 说明符是一个语句标签,当程序到达文件结尾时,程序将跳转到该标签。
示例
此示例演示从文件读取和写入文件。
在这个程序中,我们从上一个示例中创建的文件data1.dat读取数据,并在屏幕上显示它。
program outputdata
implicit none
real, dimension(100) :: x, y
real, dimension(100) :: p, q
integer :: i
! data
do i = 1,100
x(i) = i * 0.1
y(i) = sin(x(i)) * (1-cos(x(i)/3.0))
end do
! output data into a file
open(1, file = 'data1.dat', status='new')
do i = 1,100
write(1,*) x(i), y(i)
end do
close(1)
! opening the file for reading
open (2, file = 'data1.dat', status = 'old')
do i = 1,100
read(2,*) p(i), q(i)
end do
close(2)
do i = 1,100
write(*,*) p(i), q(i)
end do
end program outputdata
编译并执行上述代码后,将产生以下结果:
0.100000001 5.54589933E-05 0.200000003 4.41325130E-04 0.300000012 1.47636665E-03 0.400000006 3.45637114E-03 0.500000000 6.64328877E-03 0.600000024 1.12552457E-02 0.699999988 1.74576249E-02 0.800000012 2.53552198E-02 0.900000036 3.49861123E-02 1.00000000 4.63171229E-02 1.10000002 5.92407547E-02 1.20000005 7.35742599E-02 1.30000007 8.90605897E-02 1.39999998 0.105371222 1.50000000 0.122110792 1.60000002 0.138823599 1.70000005 0.155002072 1.80000007 0.170096487 1.89999998 0.183526158 2.00000000 0.194692180 2.10000014 0.202990443 2.20000005 0.207826138 2.29999995 0.208628103 2.40000010 0.204863414 2.50000000 0.196052119 2.60000014 0.181780845 2.70000005 0.161716297 2.79999995 0.135617107 2.90000010 0.103344671 3.00000000 6.48725405E-02 3.10000014 2.02930309E-02 3.20000005 -3.01767997E-02 3.29999995 -8.61928314E-02 3.40000010 -0.147283033 3.50000000 -0.212848678 3.60000014 -0.282169819 3.70000005 -0.354410470 3.79999995 -0.428629100 3.90000010 -0.503789663 4.00000000 -0.578774154 4.09999990 -0.652400017 4.20000029 -0.723436713 4.30000019 -0.790623367 4.40000010 -0.852691114 4.50000000 -0.908382416 4.59999990 -0.956472993 4.70000029 -0.995793998 4.80000019 -1.02525222 4.90000010 -1.04385209 5.00000000 -1.05071592 5.09999990 -1.04510069 5.20000029 -1.02641726 5.30000019 -0.994243503 5.40000010 -0.948338211 5.50000000 -0.888650239 5.59999990 -0.815326691 5.70000029 -0.728716135 5.80000019 -0.629372001 5.90000010 -0.518047631 6.00000000 -0.395693362 6.09999990 -0.263447165 6.20000029 -0.122622721 6.30000019 2.53026206E-02 6.40000010 0.178709000 6.50000000 0.335851669 6.59999990 0.494883657 6.70000029 0.653881252 6.80000019 0.810866773 6.90000010 0.963840425 7.00000000 1.11080539 7.09999990 1.24979746 7.20000029 1.37891412 7.30000019 1.49633956 7.40000010 1.60037732 7.50000000 1.68947268 7.59999990 1.76223695 7.70000029 1.81747139 7.80000019 1.85418403 7.90000010 1.87160957 8.00000000 1.86922085 8.10000038 1.84674001 8.19999981 1.80414569 8.30000019 1.74167395 8.40000057 1.65982044 8.50000000 1.55933595 8.60000038 1.44121361 8.69999981 1.30668485 8.80000019 1.15719533 8.90000057 0.994394958 9.00000000 0.820112705 9.10000038 0.636327863 9.19999981 0.445154816 9.30000019 0.248800844 9.40000057 4.95488606E-02 9.50000000 -0.150278628 9.60000038 -0.348357052 9.69999981 -0.542378068 9.80000019 -0.730095863 9.90000057 -0.909344316 10.0000000 -1.07807255