Fortran-file-input-output

提供:Dev Guides
移動先:案内検索

Fortran-ファイル入出力

Fortranでは、ファイルからデータを読み取り、ファイルにデータを書き込むことができます。

前の章では、端末からデータを読み取り、端末にデータを書き込む方法を説明しました。 この章では、Fortranが提供するファイルの入出力機能について学習します。

1つまたは複数のファイルを読み書きできます。 OPEN、WRITE、READ、およびCLOSEステートメントにより、これを実現できます。

ファイルの開閉

ファイルを使用する前に、ファイルを開く必要があります。 open コマンドは、読み取りまたは書き込みのためにファイルを開くために使用されます。 コマンドの最も単純な形式は-

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

しかし、オープンステートメントは一般的な形式を持っている可能性があります-

open (list-of-specifiers)

次の表は、最も一般的に使用される指定子を説明しています-

Sr.No Specifier & Description
1

[UNIT=] u

ユニット番号は9〜99の範囲の任意の番号で、ファイルを示します。任意の番号を選択できますが、プログラム内のすべての開いているファイルには一意の番号が必要です。

2

IOSTAT= ios

これはI/Oステータス識別子であり、整数変数でなければなりません。 openステートメントが成功した場合、返されるios値はゼロです。それ以外の場合はゼロ以外の値です。

3

ERR = err

これは、エラーが発生した場合にコントロールがジャンプするラベルです。

4

FILE = fname

ファイル名、文字列。

5

STATUS = sta

ファイルの以前のステータスが表示されます。 文字列であり、3つの値NEW、OLD、またはSCRATCHのいずれかを持つことができます。 スクラッチファイルは、閉じられるかプログラムが終了すると作成および削除されます。

6

ACCESS = acc

ファイルアクセスモードです。 SEQUENTIALまたはDIRECTの2つの値のいずれかを持つことができます。 デフォルトはSEQUENTIALです。

7

FORM = frm

ファイルのフォーマット状態を示します。 FORMATTEDまたはUNFORMATTEDの2つの値のいずれかを持つことができます。 デフォルトはUNFORMATTEDです

8

RECL = rl

直接アクセスファイルの各レコードの長さを指定します。

ファイルが開かれた後、読み取りおよび書き込みステートメントによってアクセスされます。 完了したら、 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