打开和关闭文件
在使用文件之前,您必须打开该文件。这open命令用于打开文件进行读取或写入。命令的最简单形式是 -
open (unit = number, file = "name").
但是,开放式声明可能具有一般形式 -
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。默认值为连续。
|
7 |
FORM = frm
它给出了文件的格式化状态。可以有 FORMATTED 或 UNFORMATTED 两个值中的任何一个。默认为未格式化
|
8 |
RECL = rl
它指定直接访问文件中每条记录的长度。
|
打开文件后,可以通过 read 和 write 语句访问它。完成后,应使用close陈述。
close 语句具有以下语法 -
close ([UNIT = ]u[,IOSTAT = ios,ERR = err,STATUS = sta])
请注意,括号中的参数是可选的。
Example
此示例演示打开一个新文件以将一些数据写入文件。
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 说明符是程序在到达文件结尾时跳转的语句标签。
Example
此示例演示了读取和写入文件。
在这个程序中,我们从文件中读取,我们在上一个示例中创建了 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