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