I/O 並び中の単純並び項目

データ転送文において,単純項目並びは次の形式を取ります。

item [,item]...

item
以下のいずれか。

データ転送文は,並び項目に対して,その項目が現れる (左から右の) 順序で値を代入します (または値を転送します)。

書式なし入力または出力文の I/O 並びで複数の配列名が使用された場合,並び内に配列名引用がいくつあっても,1 つの記録だけが読み取りまたは書き込みされます。

次の例は単純 I/O 並びを示しています。

	WRITE (6,10) J, K(3), 4, (L+4)/2, N

I/O 並び中で配列名引用を使用すると,入力文は配列のすべての項目を充填するのに十分なデータを読み取ります。出力文は配列中のすべての値を書き込みます。

データ転送は,配列の最初の項目から始まり,添字の順序で,一番左の添字が最も急速に変わるように進められます。次の文は 2 次元の配列を定義しています。

	DIMENSION ARRAY(3,3)

READ 文中で,名前 ARRAY が添字なしで指定された場合,その文は入力記録の値を ARRAY(1,1)ARRAY(2,1)ARRAY(3,1)ARRAY(1,2) のような順序で,ARRAY(3,3) までに代入します。

入力記録が次の値を含んでいたとします。

	1,3,721.73

次の例は,I/O 並び中の変数を,後で並び中の配列添字として使用する方法を示しています。

	DIMENSION ARRAY(3,3)
	...
	READ (1,30) J, K, ARRAY(J,K)

READ 文が実行されると,第 1 の入力値が J に,第 2 の入力値が K に代入されて,ARRAY(J,K) の添字値が確立されます。その後,値 721.73 が ARRAY(1,3) に代入されます。変数は,配列添字として使われる前に指定されていなくてはならないことに注意してください。

次の構造型定義と構造体宣言を考えます。

	TYPE EMPLOYEE
	  INTEGER ID
	  CHARACTER(LEN=40) NAME
	END TYPE EMPLOYEE
	...
	TYPE(EMPLOYEE) :: CONTRACT	! 構造体型 EMPLOYEE

以下の文は等価です。

	READ *, CONTRACT

	READ *, CONTRACT%ID, CONTRACT%NAME

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

	! I/O 並び中の変数と配列要素:
	    REAL b(99)
	    READ (*, 300) n, b(n)	! n と b(n) が I/O 並びです。
	300 FORMAT (I2, F10.5)		! FORMAT 文は入力データが
					!どのような形式を持つか示します。

	! I/O 並び中の構造型と型要素:
	    TYPE YOUR_DATA
	      REAL a
	      CHARACTER(30) info
	      COMPLEX cx
	    END TYPE YOUR_DATA
	    TYPE (YOUR_DATA) yd1, yd2
	    yd1.a = 2.3
	    yd1.info = "This is a type demo."
	    yd1.cx = (3.0, 4.0)
	    yd2.cx = (4.5, 6.7)
	! I/O 並びは WRITE (*,500) に従います。
	    WRITE (*, 500) yd1, yd2.cx
	! FORMAT 文は I/O 並びがどのように出力されるかを示しています。
	500 FORMAT (F5.3, A21, F5.2, ',', F5.2, ' yd2.cx = (', F5.2,
			',',F5.2, ' )')
	! 出力は以下のようになります:
	! 2.300This is a type demo 3.00, 4.00 yd2.cx = ( 4.50, 6.70 )

以下の例は,配列と部分配列を使っています。

	! I/O 並び中の配列:
	    INTEGER handle(5)
	    DATA handle / 5*0 /
	    WRITE (*, 99) handle
	99  FORMAT (5I5)
	! I/O 並び中の部分配列:
	    WRITE (*, 100) handle(2:3)
	100 FORMAT (2I5)

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

	PRINT *,'(I5)', 2*3	! I/O 並びは式 2*3 です。

以下の例は,変数群を使っています。

	! 変数群 I/O:
	INTEGER int1
	LOGICAL log1
	REAL r1
	CHARACTER (20) char20
	NAMELIST /mylist/ int1, log1, r1, char20
	int1 = 1
	log1 = .TRUE.
	r1 = 1.0
	char20 = 'NAMELIST demo'
	OPEN (UNIT = 4, FILE = 'MYFILE.DAT', DELIM = 'APOSTROPHE')
	WRITE (UNIT = 4, NML = mylist)
	! 以下の内容を出力します:
	! &MYLIST
	! INT1 = 1,
	! LOG1 = T,
	! R1 = 1.000000    ,
	! CHAR20 = 'NAMELIST demo '
	! /
	REWIND(4)
	READ (4, mylist)

関連情報

I/O 並びの一般的な規則の詳細については,「I/O 並び」を参照してください。