阅读(2656) (0)

Fortran的文件输入输出

2016-12-12 14:24:08 更新

Fortran语言,您可以读取数据,并将数据写入到文件中。

在最后一章,你看到了如何读取数据,并将数据写入到终端。在本章中,您将学习用Fortran语言提供的文件输入和输出功能。

可以读取和写入到一个或多个文件。开放,写入,读取和CLOSE语句,可以实现这一目标。

打开和关闭文件

使用文件之前,必须先打开该文件。 打开命令用来打开文件进行读取或写入。该命令的最简单的形式是:

open (unit = number, file = "name").

然而,开放的声明可能有一个一般形式:

open (list-of-specifiers)

下表介绍最常用的指示符:

说明描述
[UNIT =]ù 单元号ü可以是任何数量范围9-99,它表明该文件,你可以选择任何号码,但在程序中每个打开的文件必须有一个唯一的编号
IOSTAT = IOS 它是在I / O状态标识符和应为整数的变量。如果打开语句成功,则返回的IOS值为零其他非零值。
ERR = ERR 这是任何错误的情况下,控制跳转的标签。
FILE = FNAME 文件名,一个字符串。
STATUS =站它显示了该文件的先前状态。一个字符串,可以有三个值新的,旧的或SCRATCH之一。划痕文件被创建和删除关闭时或程序结束。
ACCESS = ACC 它是该文件的访问模式。可以有两个值,顺序或直销。默认值是连续的。
FORM = FRM 它给该文件的格式的状态。可以有格式化或者非格式化两个值。默认值为UNFORMATTED
RECL = RL 它指定每个记录中直接访问文件的长度。

该文件已被打开后,它是由读写语句访问。一旦这样做,就应该使用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 ([UNIT=]u, [FMT=]fmt, IOSTAT=ios, ERR=err, END=s)
write([UNIT=]u, [FMT=]fmt, IOSTAT=ios, ERR=err, END=s)

大多数符的已在上表中进行讨论。

结束= 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