- 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