位置:首頁 > 高級語言 > Fortran教學 > Fortran文件輸入輸出

Fortran文件輸入輸出

Fortran語言可以讀取數據,並將數據寫入到文件中。

在最後一章中,已經看到了如何讀取數據和寫入數據到終端。在本章中,將學習用Fortran語言提供文件的輸入和輸出功能。

可以讀取和寫入到一個或多個文件。OPEN, WRITE, READ 和 CLOSE語句可以實現這一目標。

打開和關閉文件

使用文件之前,必須打開該文件。 open命令用於打開文件進行讀取或寫入。命令的最簡單的形式是:

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

然而,open 語句的一般形式:

open (list-of-specifiers)

下表介紹了最常用的修飾符:

修辭符 描述
[UNIT=] u 單元數u可以是任何數量範圍內9-99,它表明該文件,可以選擇任何號碼,但在程序中每一個打開的文件必須有一個唯一的數字
IOSTAT= ios 它是在I/O狀態標識符和應為整數的變量。如果打開的語句是成功,則返回IOS值為零,否則為一個非零值。
ERR = err 它是一個標簽到該控製跳以防有錯誤。
FILE = fname 文件名,一個字符串。
STATUS = sta 它示出了該文件的先前狀態。一個字符串,可以有三個值NEW, OLD 或 SCRATCH。一個臨時文件被創建和刪除,當關閉或程序結束。
ACCESS = acc 它是該文件的訪問模式。可以有兩個值SEQUENTIAL 或 DIRECT。默認值是SEQUENTIAL。
FORM= frm 它給該文件的格式的狀態。可以有FORMATTED 或UNFORMATTED兩個值。默認值是UNFORMATTED
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 ([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