データ転送文において,単純項目並びは次の形式を取ります。
item [,item]...
item
以下のいずれか。
変数は,最後の次元に次のいずれかが現れない限り,大きさ引継ぎ配列であってはなりません: 添字,ベクトル添字,または上限を指定する部分配列添字。
どの式も,同じ論理装置に対してそれ以上の I/O 操作を試みてはなりません。たとえば,同じ論理装置に対して I/O を実行する関数副プログラムを引用してはなりません。
データ転送文は,並び項目に対して,その項目が現れる (左から右の) 順序で値を代入します (または値を転送します)。
書式なし入力または出力文の 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 並び」を参照してください。