インテル® Fortran コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

論理デバイス

内部ファイルと外部ファイルの区別に関係なく、すべてのファイルは、論理デバイスに関連付けられます。ファイルに関連付けられた論理デバイスは、ユニット指定子 (UNIT=) によって識別されます。内部ファイルのユニット指定子は、それに関連付けられた文字変数の名前になります。外部ファイルのユニット指定子は、次のいずれかです。

OPEN 文により、ユニット番号と外部ファイルが結合されるので、OPEN 文の指定子を使用してファイル属性とランタイムオプションを明示的に指定することができます。特定のデバイスに事前結合されたユニット指定子は、開く必要がありません。結合した外部ユニットは、プログラムの実行が終了したとき、または CLOSE 文によってユニットが閉じられたときに解除されます。

1 つのユニットを一度に複数のファイルに結合することはできません。また、1 つのファイルを一度に複数のユニットに結合することもできません。すでに開かれているファイルを OPEN 文を使用して開き、結合の I/O オプションの一部を変更することはできますが、すでに開かれているファイルまたはユニットを、他のユニットまたはファイルに結合することはできません。

次の場合を除いて、すべての I/O 文でユニット指定子を使用する必要があります。

外部ファイル

外部ファイルに関連付けられたユニット指定子は、整数式またはアスタリスク (*) でなければなりません。整数式は、0 (ゼロ) から最大値 2,147,483,640 までの範囲でなければなりません。(FOR_K_PRINT_UNITNO、FOR_K_TYPE_UNITNO、FOR_K_ACCEPT_UNITNO、および FOR_K_READ_UNITNO の定義済みパラメーターは、この範囲ではありません。詳細は、「Language Reference」(英語) を参照してください。)

次の例は、外部ファイル UNDAMP.DAT をユニット 10 に結合して、書き込みを行います。

OPEN (UNIT = 10, FILE = 'UNDAMP.DAT')
WRITE (10, '(A18,\)') ' Undamped Motion:'

アスタリスク (*) のユニット指定子は、読み取り時にはキーボードを、書き込み時には画面を指定します。次の例は、アスタリスク指定子を使用して画面へ書き込みます。

WRITE (*, '(1X, A30,\)') ' Write this to the screen.'

インテル® Fortran では、以下の図に示すように、4 つのユニットを外部ファイル (デバイス) に事前結合しています。

外部ユニット指定子

環境変数

説明

アスタリスク (*)

なし

常にキーボードと画面を表します (FOR_READ などの適切な環境変数が定義されている場合を除く)。

0

FORT0

初期状態では画面を表します (FORT0 が明示的に定義されている場合を除く)。

5

FORT5

初期状態ではキーボードを表します (FORT5 が明示的に定義されている場合を除く)。

6

FORT6

初期状態では画面を表します (FORT6 が明示的に定義されている場合を除く)。

アスタリスク (*) 指定子は、別のファイルに再結合することができない唯一のユニット指定子で、このユニットを閉じようとするとコンパイルエラーが発生します。ユニット 0、5、および 6 は、OPEN 文で任意のファイルに結合することができます。これらのユニットのいずれかを閉じた場合は、次にそのユニットを使用する I/O 文が実行される際に、事前結合されたデバイスに自動的に再結合されます。

インテル® Fortran は、stdin へのバッファリングをサポートしていません。また、assume buffered_stdout オプションを指定しない限り、デフォルトでは stdout へバッファリングしません。ユニット * および 6 へのすべての I/O は、デフォルトでライン・バッファリングを使用します。このため、C コードでバッファリングを実行しない限り、C および Fortran の stdout への出力は問題ありません。C コードでバッファリングを行う場合は、各書き込み後にバッファーをフラッシュする必要があります。stdout および stdin の詳細は、「論理ユニットへのファイルの割り当て」を参照してください。

次のいずれかを行って、これらの事前結合ファイルを変更します。

標準の事前結合ファイルからの入力または出力を実行時にリダイレクトするには、適切な環境変数を設定するかまたはパイプで適切なシェル・リダイレクト文字を使用します (> または < など)。

OPEN 文でファイル名を省略するとき、または OPEN 文を暗黙的に使用するときは、環境変数 FORTn を定義することで、特定のユニット番号 (n) に対して、ファイル名を指定することができます。ただし、fpscomp filesfromcmd オプションが指定されている場合を除きます。

例えば、ユニット 6 を使用して、標準出力の代わりにファイルへ書き込みを行う場合、プログラムを実行する前に、環境変数 FORT6 を使用するパスとファイル名に設定します。適切な環境変数が定義されていなければ、fort.n (n は論理ユニット番号) の形式で、デフォルトのファイル名が使用されます。

次の例では、事前結合されたユニット 6 (画面) に書き込みを行い、次にユニット 6 を外部ファイルに再結合して書き込みを行い、最後に、そのユニットを画面に再結合して書き込みを行います。

    REAL a, b
!  画面 (事前結合されたユニット 6) へ書き込む
    WRITE(6, '('' This is unit 6'')')
!  OPEN 文を使用してユニット 6 を
!  外部ファイル 'COSINES' に接続
    OPEN (UNIT = 6, FILE = 'COSINES', STATUS = 'NEW')
    DO k = 1, 63, 1
         a = k/10
         b = COS (a)
!  ファイル 'COSINES' に書き込む
          WRITE (6, 100) a, b
100        FORMAT (F3.1, F5.2)
    END DO
!  閉じる
    CLOSE (6)
!  書き込みによりユニット 6 を画面に再結合
    WRITE(6,' ('' Cosines completed'')')
    END

内部ファイル

内部ファイルに関連付けられたユニット指定子は、スカラーまたは文字配列変数になります。

内部ファイルを使用するときには、次の規則に従います。

FORMAT I/O 文、ネームリスト I/O 文、またはリスト指定 I/O 文を使用した内部ファイルへの読み書きは、外部ファイルの場合と全く同じように行えます。内部ファイルの位置は、I/O 文が実行される前に、その変数の最初にある第 1 レコードの前に設定されます。

内部ファイルでは、I/O システムの書式機能を使用して、外部文字表現と Fortran 内部メモリー表現の間で値を変換することができます。内部ファイルからの読み取りでは、ASCII 表現を数値表現、論理表現、または文字表現に変換し、内部ファイルへの書き込みでは、これらの表現を ASCII 表現に変換します。

この機能により、正確な書式を知らなくても文字列を読み取ることができ、文字列を調査して、内容を解釈することができます。また、ダイアログボックスなどで、ユーザーに文字列を入力させ、アプリケーション内でその文字列を数値として解釈することも可能になります。

レコード全体が内部ファイルへ書き込まれなかった場合、レコードの残りの部分には空白が挿入されます。

次の例では、str および fname で内部ファイルを指定しています。

 
   CHARACTER(10) str
   INTEGER n1, n2, n3
   CHARACTER(14) fname
   INTEGER   i
   str = " 1   2   3"
! リスト指定 READ 文で n1 = 1、n2 = 2、n3 = 3 を設定
   READ(str, *) n1, n2, n3
   i = 4
! 書式付き WRITE 文で fname = 'FM004.DAT’ を設定
   WRITE (fname, 200) i
200 FORMAT ('FM', I3.3, '.DAT')

関連情報