I/O 並び中の DO 形反復

データ転送文において DO 形反復は,DO ループ中の I/O 文の一部であるかのように機能します。これは次の形式を取ります。

(list, do-var = expr1, expr2 [,expr3])

list
変数,式,または定数の並び (「I/O 並び中の単純並び項目」を参照してください)。

do-var
スカラ整数または実数変数の名前。変数は,list 中の入力項目または出力項目の 1 つであってはなりません。

expr
整数型または実数型のスカラ数値式。これらは,すべてが同じ型であったり,DO 変数と同じ型である必要はありません。

DO 形反復は,DO 構文と同じように開始され,実行され,終了します。

listDO 形反復の範囲です。その並び中の項目は,do-var を引用することができますが,do-var 値を変更してはなりません。

2 つの入れ子にされた DO 形反復が,同じ (または結合された) DO 変数を持つことはできません。

DO 形反復は以下の用途に使用することができます。

DO 形反復を含んでいる I/O 文が (ENDEORERR 飛越しによって,またはゼロ以外の IOSTAT 値で) 異常終了した場合,DO 変数は不定となります。

以下の 2 つの出力文は等価です。

	WRITE (3,200) (A,B,C, I=1,3)	! DO 形反復

	WRITE (3,200) A,B,C,A,B,C,A,B,C	! 単純並び項目

次の例は,入れ子にされた DO 形反復を示しています。一番内側の並びの実行が最も多く繰り返されます。

	WRITE (6,150) ((FORM(K,L), L=1,10), K=1,10,2)

内側の DO ループは,外側ループを繰り返すたびに 10 回実行されます。第 2 添字 (L) は,第 1 添字 (K) が 1 だけ増えるたびに,1 から 10 まで増えます。これは通常の配列要素順序とは逆の順序です。K は 2 ずつ増えるので,配列の奇数番号の行だけが出力されることに注意してください。

次の例では,I が 2 に増える前に,DO 形反復の並び全体 (P(1)Q(1,1)Q(1,2)...Q(1,10)) が読み取られます。

	READ (5,999) (P(I), (Q(I,J), J=1,10), I=1,5)

次の例は,固定添字と DO 形反復に従って変化する添字を使用しています。

	READ (3,5555) (BOX(1,J), J=1,10)

入力値は BOX(1,1) から BOX(1,10) までに代入されますが,配列の他の要素は影響を受けません。

次の例は,DO 変数を直接出力する方法を示しています。

	WRITE (6,1111) (I, I=1,20)

整数 1 ~ 20 が書き込まれます。

以下に他の例を示します。

	     INTEGER mydata(25)
	     READ (10, 9000) (mydata(I), I=6,10,1)
	9000 FORMAT (5I3)

この例では,I/O 並びは mydata と呼ばれる配列の 6 ~ 10 の要素に入力データを置くように指定しています。DO 形反復の第 3 の値,ループの増分値は,省略可能です。省略すると,ループの増分値として基本値 1 が使われます。

関連情報