WRITE

目的

WRITE ステートメントは、データ転送出力ステートメントです。

構文

構文図を読む構文図をスキップする
>>-WRITE--(--io_control_list--)--+------------------+----------><
                                 '-output_item_list-'   

output_item
出力リスト項目です。出力リストは、転送されるデータを指定します。 出力リスト項目は、以下のとおりです。
  • 変数名。配列は、そのエレメントのすべてがストレージに配置されている順序で指定されたように処理されます。

    ポインターを、ターゲットと関連付けて、割り振り可能オブジェクトを割り振る必要があります。派生型オブジェクトは、このステートメントの有効範囲単位の外側にある最終コンポーネントを持つことができません。output_item の評価の結果は、ポインターを含む派生型オブジェクトにはできません。定形式ステートメント内の構造体の構造体コンポーネントは、派生型定義で指定された順序で処理されます。不定形式ステートメントでは、構造体コンポーネントは、内部表記 (埋め込みを含む) 内の単一値として処理されます。

  • 暗黙 DO リストで説明している、暗黙 DO リスト

output_item は、プロシージャー・ポインターにしないでください。

io_control
1 つの装置指定子 (UNIT=) を含める必要があり、それぞれ他の有効な指定子を 1 つ含めることもできるリストです。
[UNIT=] u
出力操作で使用される装置を指定する装置指定子です。u は、外部装置識別子または内部ファイル識別子です。
外部装置識別子は、外部ファイルを参照します。 これは、以下のいずれかになります。
  • 値の範囲が 1 から 2147483647 である整数式。
  • 外部装置 6 を識別して、標準出力に事前に関連付けられているアスタリスク
  • Fortran 2008 の始まりA NEWUNIT 値Fortran
2008 の終わり

内部ファイル識別子は、内部ファイルを参照します。文字変数の名前です。これは、ベクトル添え字を持つ配列セクションにできません。

オプション文字 UNIT= を省略する場合、u を、io_control_list の最初の項目にする必要があります。UNIT= を指定する場合、FMT= も指定する必要があります。

[FMT=] format
出力操作で使用される形式を指定する形式指定子です。format は、以下のような形式識別子です。
  • FORMAT ステートメントのステートメント・ラベルです。FORMAT ステートメントは、同じ有効範囲単位に置く必要があります。
  • FORMAT ステートメントのステートメント・ラベルを代入した、スカラー INTEGER(4) または INTEGER(8) の変数の名前です。FORMAT ステートメントは、同じ有効範囲単位に置く必要があります。

    Fortran 95 は、ステートメント・ラベルの代入ができません。

  • 括弧で囲まれた文字定数。括弧の間に使用できるのは、FORMATにリストされている形式コードのみです。ブランク文字は、左括弧の前または右括弧の後に置くことができます。
  • 左端の文字位置が有効な形式を構成している文字データを含む文字変数です。有効な形式は、左括弧で始まり、右括弧で終わります。括弧の間に使用できるのは、FORMAT ステートメント内で説明されている形式コードのみです。ブランク文字は、左括弧の前または右括弧の後に置くことができます。format が配列エレメントの場合、形式識別子が、配列エレメントの長さを超えないようにする必要があります。
  • 非文字組み込み型の配列です。データは、文字配列で説明されている有効な形式識別子にする必要があります。
  • 文字式です。オペランドが定数の名前でないかぎり、継承された長さを指定するオペランドの連結を含んだ文字式は除きます。
  • リスト指示形式設定で指定するアスタリスクです。
  • 前に定義された名前リストのリスト名を指定する 名前リスト指定子です。

オプション文字 FMT= を省略する場合、formatio_control_list の 2 番目の項目にして、最初の項目を UNIT= を省略した装置指定子にする必要があります。NML=FMT= の両方を、同じ出力ステートメントに指定できません。

ASYNCH= char_expr (IBM 拡張)
明示的に関連付けられた装置が、非同期入出力に使用されるかどうかを示す、非同期入出力指定子です。

char_expr は、値が YES または NO のいずれかであるスカラー文字式です。YES は、非同期データ転送ステートメントを、この関連付けに使用できることを指定します。NO は、非同期データ転送ステートメントを、この関連付けに使用できないことを指定します。指定された値は、ファイルに使用できる転送方式のセットに入ります。この指定子が省略された場合、デフォルト値は NO です。

事前に関連付けられた値は、ASYNCH= の値 NO で関連付けられます。

暗黙的に関連付けられた ASYNCH= 値は、装置で実行される最初のデータ転送ステートメントによって決定されます。 最初のステートメントが非同期データ転送を実行して、暗黙的に関連付けられるファイルが非同期データ転送を使用できる場合、ASYNCH= の値は YES になります。 それ以外では、ASYNCH= の値は NO になります。

ASYNCHRONOUS=char_expr (Fortran 2003)
データ転送が完了するのを待たずに、実行を継続できます。char_exprは、YES または NO として 評価されるスカラー文字式です。ASYNCHRONOUS=YES は、UNIT= で、ファイル装置番号を指定しないかぎり現れません。ID= を指定する場合、ASYNCHRONOUS=YES も指定する必要があります。

ASYNCHRONOUS=NO または、ASYNCHRONOUS=ID= 両方がない場合、ステートメントおよび入出力操作は同期です。ASYNCHRONOUS=YES の場合、あるいは、ID= が現れる場合は、非同期入出力が許可されるのは、OPEN ステートメント内の ASYNCHRONOUS=YES で開いた外部ファイルに対してのみです。

変数が、入出力リスト内の項目、名前リスト内のグループ・オブジェクトまたは、SIZE= 指定子として、非同期データ転送ステートメント内で使用される場合、data_ref の基本オブジェクトには、データ転送ステートメントの有効範囲単位内の ASYNCHRONOUS 属性が、暗黙的に指定されます。非同期の非事前入力の場合、SIZE= 指定子に指定された記憶単位は、対応する待機命令が実行される時に転送される文字の数で定義されます。非同期出力の場合、処理中の I/O ストレージ・シーケンス・アフェクターは、再定義されないか、未定義状態になるか、そのポインター関連付け状況が変更されます。非同期入力の場合、処理中の I/O ストレージ・シーケンス・アフェクターは、参照されないか、定義されるか、未定義状態になるか、VALUE 属性を持つ仮引数と関連付けられるか、ポインター関連付け状況が変更されます。

前に実行した非同期データ転送ステートメントに対して、エラー条件、ファイル終了条件、またはレコード終了条件が生じた場合、待機命令は、その装置にあるすべての保留データ転送操作に対して実行されます。後続のステートメント中に、条件が発生した場合、そのステートメントの IOSTAT=IOMSG=ERR=END=、および EOR= 指定子が使用されます。

待機命令は、WAITCLOSE またはファイル位置決めステートメントによって実行されます。

DECIMAL= char_expr (Fortran 2003)
入出力ステートメントの継続中、デフォルトの 10 進数編集モード を一時的に変更します。char_expr は、値が POINT または COMMA のいずれかに評価されるスカラー文字式です。それぞれの WRITE ステートメントの後、モードは、デフォルトで、その装置に対して OPEN ステートメントで指定された (前提とされた) 10 進数モードになります。
POS=integer_expr (Fortran 2003)
integer_expr は、0 より大きい整数式です。POS= は、ストリーム・アクセスに関連付けられたファイル内に書き込まれたファイル記憶単位のファイル位置を指定します。位置付けができないファイルに対して POS= を使用しないでください。
REC= integer_expr
直接アクセスに関連付けられたファイル内に書き込まれるレコードの数を指定するレコード指定子です。REC= 指定子は、直接の出力に対してのみ使用できます。integer_expr は、値が正の整数式です。レコード指定子は、形式設定がリスト指示であるか、装置指定子が内部ファイルを指定している場合は、無効です。レコード指定子は、ファイル内のレコードの相対位置を表します。最初のレコードの相対位置数は 1 です。ストリーム・アクセスに関連付けられた装置を指定するデータ転送ステートメント内に REC= を指定しないでください。または POS= 指定子を使用しないでください。
ROUND= char-expr (Fortran 2003)

この入出力ステートメントの継続中、入出力丸めモードの現行値を一時的に変更します。省略された場合、丸めモードは変更されません。char-expr は、UPDOWNZERONEARESTCOMPATIBLE または PROCESSOR_DEFINED のいずれかとして評価されます。

丸めモード・ヘルプによって、定様式入出力中に 10 進数を文字表記から内部表記 (すなわち、2 進数) に変換する方法、またはその逆にする方法を指定します。丸めモードには、以下の関数があります。

  • UP 丸めモードでは、変換による値は、元の値以上の最小値になります。
  • DOWN 丸めモードでは、変換による値は、元の値以下の最大値になります。
  • ZERO 丸めモードでは、変換による値は、元の値に最も近く、絶対値ではより大きくない値になります。
  • NEAREST 丸めモードでは、変換による値は、表記可能な、最も隣接した 2 つの値のより近い方になります。両方の値が同じように近い場合、偶数値が選択されます。IEEE 丸め変換で、NEAREST は、IEEE 標準で指定される ieee_nearest 丸めモードに相当します。
  • COMPATIBLE 丸めモードでは、変換による値は、表記可能な、最も隣接した 2 つの値の内、最も近い値か、中間である場合はよりゼロから離れた値になります。
  • PROCESSOR_DEFINED 丸めモードでは、変換による値は、プロセッサー従属となり、他のモードに対応することがあります。PROCESSOR_DEFINED 丸めモードでは、変換による値は、プロセッサー従属となり、他のモードに対応することがあります。XL Fortran では、PROCESSOR_DEFINED 丸めモードは、浮動小数点制御レジスターで選択する丸めモードとなります。浮動小数点制御レジスターを明示的に設定していない場合、デフォルトの丸めモードは NEAREST です。
SIGN= char_expr (Fortran 2003)
定様式入出力の関連付けに効力のある符号モードを示します。 char_expr に、値 PLUS が割り当てられている場合、プロセッサーは、通常オプションの正符号が含まれているすべての位置に、正符号を出し、char_expr に、値 SUPPRESS が割り当てられている場合は、これらの位置で正符号を抑制します。char_expr には、値 PROCESSOR_DEFINED を割り当てることもできます。これは、デフォルトの符号モードで、SUPPRESS と同じ働きをします。関連付けがない場合、あるいは、定様式入出力の関連付けではない場合、char_expr には、値 UNDEFINED を割り当てます。
IOMSG= iomsg_variable (Fortran 2003)
入出力状況指定子です。これは、入出力操作によって戻されるメッセージを指定します。iomsg_variable は、デフォルトのスカラー文字変数です。これを、使用で関連付けられた非ポインターで保護された変数にしないでください。 この指定子を含む入出力ステートメントが実行を終了する時、iomsg_variable は、以下のように定義されます。
  • エラー条件、ファイル終了条件、レコード終了条件が発生した場合、代入による場合と同じように、変数に説明的なメッセージが割り当てられます。
  • このような条件が発生しない場合は、変数の値は変更されません。
IOSTAT= ios
入出力状況指定子です。これは、入出力操作の状況を指定します。ios は、整変数です。IOSTAT= 指定子をコーディングすることによって、エラー・メッセージを抑制します。ステートメントが実行を終了すると、ios は、以下の値で定義されます。
  • エラー条件が発生しない場合はゼロ値
  • エラーが発生した場合は正の値
ID= integer_variable(IBM 拡張)
データ転送が非同期に行われるように示します。integer_variable は、整変数です。エラーが発生しない場合、integer_variable は、非同期データ転送ステートメントの実行後の値で定義されます。この値は、対の WAIT ステートメントで使用される必要があります。

非同期データ転送は、直接不定形式、順次不定形式、ストリーム不定形式のいずれかにする必要があります。内部ファイルへの非同期入出力は禁止されています。未加工キャラクター型デバイス (例えば、テープや未加工論理ボリューム) への非同期入出力は禁止されています。integer_variable を、データ転送入出力リスト内のエンティティー、またはデータ転送入出力リスト内の io_implied_dodo_variable と関連付けないでください。integer_variable が配列エレメント参照の場合、その添え字値が、データ転送、io_implied_do 処理、あるいは io_control_spec 内の他の指定子の定義や評価の影響を受けないようにしてください。

DELIM= char_expr (Fortran 2003)
区切り文字がある場合は、リスト指示または名前リスト形式設定によって書き込まれる文字定数を区切るのに使用される区切り文字を指定します。char_expr は、値が APOSTROPHEQUOTE、または NONE として評価されるスカラー文字式です。値が APOSTROPHE である場合、アポストロフィ区切り文字定数および文字定数内のすべてのアポストロフィは二重にされます。値が QUOTE である場合、二重引用符区切り文字定数および文字定数内のすべての二重引用符は二重にされます。値が NONE である場合、文字定数は区切り文字で区切られず、文字は二重になりません。デフォルト値は NONE です。DELIM= 指定子は、定様式レコードの入力中に無視されますが、定様式入出力に関連付けられるファイルにのみ使用できます。
ERR= stmt_label
エラー指定子です。これは、エラーが発生した場合に、制御の転送先と同じ有効範囲単位内にある実行可能ステートメントのステートメント・ラベルを指定します。ERR= 指定子をコーディングすることによって、エラー・メッセージを抑制します。
NUM= integer_variable(IBM 拡張)
入出力リストとファイル間で伝送されるデータのバイト数を指定する数値指定子です。integer_variable は、整変数です。NUM= 指定子は、不定様式出力に対してのみ使用できます。NUM パラメーターのコーディングによって、出力リストによって示されるバイト数が、レコードに書き込めるバイト数よりも大きい場合に起こるエラーの表示を抑制します。 この場合、integer_variable は、書き込めるレコード最大長の値に設定されます。 残りの出力リスト項目からのデータは、後続のレコードに書き込まれません。 非同期データ転送ステートメントと、対応する WAIT ステートメントとの間で非同期データ転送ステートメントを実行する プログラムの一部では、NUM= 指定子の integer_variable またはそれに関連するすべての変数を、参照したり、 定義したり、定義を削除したりしてはなりません。
[NML=] name
前に定義された名前リストのリスト名を指定する名前リスト指定子です。オプション文字 NML= を指定しない場合、名前リストの名前を、リスト内の 2 番目のパラメーターとして、最初の項目を UNIT= を省略した装置指定子にする必要があります。NML=UNIT= 両方を指定する場合、すべてのパラメーターは、任意の順序で現れます。NML= 指定子は、FMT= の代替です。NML=FMT= 両方を、同じ出力ステートメントに指定することはできません。
ADVANCE= char_expr
このステートメントに対して、非事前出力が発生するかどうかを決定する事前指定子です。char_expr は、YES または NO として評価されるスカラー文字式です。NO が指定された場合、事前出力は発生しません。YES が指定された場合、事前の定様式順次出力または定様式ストリーム出力が起きます。デフォルト値は YES です。ADVANCE= は、内部ファイル装置指定子を指定しない、明示的形式仕様を持つ、定様式順次 WRITE ステートメントにのみ指定できます。

規則

NUM= 指定子がある場合、形式指定子または名前リスト指定子は指定できません。

IOSTAT= および NUM= 指定子に指定された変数は、出力リスト項目、名前リストのリスト項目、または暗黙 DO リストの DO 変数と関連付けないでください。このような指定子変数が配列エレメントの場合、添え字値が、データ転送、暗黙 DO 処理、またはその他の指定子の定義や評価の影響を受けないようにしてください。

ERR= および IOSTAT= 指定子が設定され、同期データ転送中にエラーが検出された場合、ERR= 指定子によって指定されたステートメントに転送され、正整数値が ios に割り当てられます。

IBM 拡張

ERR= または IOSTAT= 指定子が設定され、非同期データ転送中にエラーが検出された場合、対応する WAIT ステートメントの実行は必要ありません。

変換エラーが検出されて、CNVERR 実行時オプションが NO に設定されている場合、ERR= は、IOSTAT= が設定されていたとしても分岐しません。

IOSTAT= および ERR= が指定されない場合、以下のようになります。
  • 重大エラーが検出された場合、プログラムは停止します。
  • リカバリー可能エラーが検出され、ERR_RECOVERY 実行時オプションが YES に設定されている場合は、プログラムは継続されて次のステートメントに進みます。オプションが NO に設定されている場合は、プログラムは停止します。
  • ERR_RECOVERY 実行時オプションが YES に設定されている場合、変換エラーが検出されると、プログラムは続行されて次のステートメントに進みます。CNVERR 実行時オプションが YES に設定されている場合、変換エラーは、リカバリー可能エラーとして処理されます。CNVERR=NO の時は、変換エラーとして処理されます。

PRINT 形式 は、WRITE(*,format) と同じ効果があります。

WRITE (6,FMT='(10F8.2)') (LOG(A(I)),I=1,N+9,K),G

関連情報