Oracle® Developer Studio 12.5: Fortran ユーザーズガイド

印刷ビューの終了

更新: 2016 年 6 月
 
 

4.7 新しい入出力拡張機能

ここでは、Fortran 2003 規格には含まれていませんが、f95 コンパイラで受け入れら Fortran 95 入出力処理の拡張機能について説明します。FORTRAN 77 コンパイラ、f77 の入出力拡張機能の一部は、Fortran コンパイラに組み込まれています。

4.7.1 入出力エラー処理ルーチン

2 つの新機能によって、ユーザーは独自に論理ユニットの書式付き入力のエラー処理ルーチンを指定できます。書式エラーが検出されると、実行時入出力ライブラリが、エラーの原因となった入力中の文字を表すデータを付けて、指定されたユーザー定義のハンドラを呼び出します。ハンドラルーチンは、代わりの文字を提供してエラーが検出された時点から入出力処理を続けるか、デフォルトの Fortran エラー処理を実行することができます。

この新しいルーチン、SET_IO_ERR_HANDLER(3f)GET_IO_ERR_HANDLER(3f) はモジュールサブルーチンであり、これらを呼び出すルーチンの中には USE SUN_IO_HANDLERS が必要です。これらのルーチンの詳細については、マニュアルページを参照してください。

4.7.2 可変フォーマット式

FORTRAN 77 では、ある書式の整定数を、山カッコで囲まれた任意の式に置き換えることができました。

1 FORMAT(< expr > … )

nH… 編集記述子の n として、あるいは ASSIGN 文の参照する FORMAT 文、または並列化領域内の FORMAT 文では、可変フォーマット式は使えません。

この機能は f95 で可能になり、-f77 互換性オプションフラグは不要です。

4.7.3 NAMELIST 入力形式

  • 入力時にグループ名の先頭に $ または & が付きます。& は、Fortran 95 の規格だけが受け付ける形式であり、NAMELIST 出力によっても書き込まれます。

  • 入力の終了を表す記号として $ を受け入れます。ただし、グループ内の最後のデータ項目が CHARACTER データである場合は別です。その場合、$ は、入力データとして扱われます。

  • NAMELIST 入力は、記録の最初の桁から開始することができます。

4.7.4 書式なしバイナリ入出力

ファイルを開くときに FORM='BINARY' と指定すると、レコード長がファイルに組み込まれないことを除いて、FORM='UNFORMATTED' とほぼ同じ結果になります。このデータがなければ、1 レコードの開始点と終了点を示す方法がありません。このように、後退する場所を知らせることができないので、FORM='BINARY' ファイルに対して BACKSPACE を実行できません。'BINARY' ファイルに対して READ を実行すると、入力リストの変数を設定するために必要な量のデータが読み込まれます。

  • WRITE 文。データはバイナリでファイルに書き込まれ、出力リストで指定された量のバイトが転送されます。

  • READ 文。入力リストの変数にデータが読み込まれ、リストで必要なだけのバイトが転送されます。ファイルにはレコードマークがないので、「レコードの終端」エラーは検出されません。検出されるエラーは、「ファイルの終端」または異常システムエラーだけです。

  • INQUIRE 文。FORM='BINARY' で開いたファイル上の INQUIRE は、次の結果を返します。

    FORM=”BINARY”ACCESS=”SEQUENTIAL”DIRECT=”NO”FORMATTED=”NO” UNFORMATTED=”YES”RECL=AND NEXTREC= は未定義です。

  • BACKSPACE 文。許可されていません。エラーが返されます。

  • ENDFILE 文。通常どおり、現在の位置でファイルを切り捨てます。

  • REWIND 文。通常どおり、ファイルの位置をデータの先頭に変更します。

4.7.5 その他の入出力拡張機能

  • さまざまな装置に対し再帰的な入出力が可能です (これは、f95 の入出力ライブラリが「MT-Warm」だからです)。

  • RECL=2147483646 (231-2) は、順番に書式化された、並びによる変数群出力上のデフォルトの記録長です。

  • ENCODE および DECODE は、『FORTRAN 77 言語リファレンスマニュアル』で説明するように認識され、実装されています。

  • 次に示すように、ADVANCE=’NO’ で非前進入出力が可能になります。

    write(*,’(a)’,ADVANCE=’NO’) ’n= ’ read(*,*) n