DATA

:プログラムの実行前に,変数に初期値を割り付けます。

形式

DATA var-list /c-list/[[,] var-list /c-list/]...

var-list
変数名または DO 形反復のコンマで区切られた並び。

添字式と部分列引用の中の式は初期値式でなくてはなりません。

DATA 文の中の DO 形反復は,次の形式を取ります。

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

do-list
1 つまたは複数の配列要素,部分列,スカラ構造体成分,または DO 形反復のコンマで区切られた並び。配列要素またはスカラ構造体成分は,親定数を持っていてはなりません。

var
スカラ整数変数 (DO 形反復変数) の名前。

expr
スカラ整数式。式は,この DO 形反復を範囲内に含んでいる他の DO 形反復変数を含むことができます。

c-list
定数 (または定数の名前) 並び。または,ポインタ・オブジェクトの場合は NULL()。定数はコンマで区切られていなくてはなりません。定数が構造体構成子である場合,すべての成分が初期値式でなくてはなりません。定数が 2 進,8 進,または 16 進形式である場合,対応するオブジェクトは整数型でなくてはなりません。

定数は「r*constant」という形式で宣言することができます (r は繰返し指定です)。これは負でないスカラ整定数です (種別パラメタはなし)。名前付き定数である場合,有効域の中で事前に定義されているか,参照結合または親子結合を通して参照可能でなくてはなりません。r を省略した場合,値 1 が使用されます。

規則と振る舞い

変数は実行形式プログラムの中で 1 回しか初期化できません。DATA 文中にあり,暗黙に型が付けられている変数をそれ以降の型宣言で指定する場合,その宣言は暗黙の型を追認しなくてはなりません。

c-list 中の定数の数は,var-list 中の変数の数と等しくなければなりません。定数は現れる順序で (左から右に) 変数に代入されます。

以下のオブジェクトは DATA 文中では初期化することができません。

名前付き共通ブロック中の変数を除き,名前付き変数は,そのいずれかの部分が DATA 文中で初期化されている場合,SAVE 属性を持ちます。このプロパティを追認するには,SAVE 文か,SAVE 属性を含んでいる型宣言文でその変数を指定します。

DATA 文に添字なしの配列名が現れた場合,値はその配列の個々の要素に,添字の進行順序に従って代入されます。結合された定数並びは,配列を充填するのに十分な数の値を含んでいなくてはなりません。

配列要素値は 3 つの方法で初期化することができます。名前による方法,要素による方法,または DO 形反復による方法 (DO 構文と同じように解釈されます) です。

変数および定数並び項目には,以下の変換規則と制約が適用されます。

互換性

CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB

関連情報

CHARACTERCOMMONCOMPLEXI/O 並びINTEGERREALデータ型,定数,および変数

次の例は,DATA 文を使って配列要素値を初期化する 3 つの方法を示しています。

	DIMENSION A(10,10)
	DATA A/100*1.0/					! 名前による初期化
	DATA A(1,1), A(10,1), A(3,3) /2*2.5, 2.0/	! 要素による初期化
	DATA ((A(I,J), I=1,5,2), J=1,5) /15*1.0/	! DO 形反復による初期化

次の例は,構造体成分を含んでいる DATA 文を示しています。

	TYPE EMPLOYEE
	  INTEGER ID
	  CHARACTER(LEN=40) NAME
	END TYPE EMPLOYEE
	TYPE(EMPLOYEE) MAN_NAME, CON_NAME
	DATA MAN_NAME / EMPLOYEE(417, 'Henry Adams') /
	DATA CON_NAME%ID, CON_NAME%NAME /891, "David James"/

次の例では,最初の DATA 文は配列 A の 10 個の要素すべてにゼロを代入し,文字変数 STARS に 4 つの星印と 2 つの空白を代入しています。

	INTEGER A(10), B(10)
	CHARACTER BELL, TAB, LF, FF, STARS*6
	DATA A,STARS /10*0,'****'/
	DATA BELL,TAB,LF,FF /7,9,10,12/
	DATA (B(I), I=1,10,2) /5*1/

この例で,第 2 の DATA 文は,文字変数 BELLTABLF,および FF に ASCII 制御文字コードを代入しています。最後の DATA 文は,DO 形反復を使って,値 1 を配列 B の奇数番目の要素に代入しています。

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

	INTEGER n, order, alpha, list(100)
	REAL coef(4), eps(2),
	pi(5), x(5,5)
	CHARACTER*12 help
	COMPLEX*8 cstuff
	DATA  n /0/, order /3/
	DATA  alpha /'A'/
	DATA  coef /1.0, 2*3.0, 1.0/, eps(1) /.00001/
	DATA  cstuff /(-1.0, -1.0)/
	! 以下の例は,5x5 行列の対角線以下を初期化しています:
	DATA  ((x(j,i), i=1,j), j=1,5) / 15*1.0 /
	DATA  pi / 5*3.14159 /
	DATA  list / 100*0 /
	DATA  help(1:4), help(5:8), help(9:12) /3*'HELP'/

以下の例を考えます。

	CHARACTER (LEN = 10) name
	INTEGER, DIMENSION (0:9) :: miles
	REAL, DIMENSION (100, 100) :: skew
	TYPE (member) myname, yours
	DATA name / 'JOHN DOE' /, miles / 10*0 /
	DATA ((skew (k, j), j = 1, k), k = 1, 100) / 5050*0.0 /
	DATA ((skew (k, j), j = k + 1, 100), k = 1, 99) / 4950*1.0 /
	DATA myname / member (21, 'JOHN SMITH') /
	DATA yours % age, yours % name / 35, 'FRED BROWN' /

この例では,文字変数 name は,'JOHN DOE' という値と変数の宣言した大きさを埋めるためにこの後に 2 個の空白で初期化されます。miles の 10 個の要素は 0 に初期化されます。2 次元配列 skew は,下側の三角形が 0,上側の三角形が 1 に初期化されます。構造体 mynameyours は,構造型 member を使って宣言されています。構造型変数 myname は,構造体構成子で初期化されます。構造型変数 yours は,各成分に対して個別に値を与えることで初期化されます。

前述の例の第 1 DATA 文は,以下のように書くこともできます。

	DATA name / 'JOHN DOE' /
	DATA miles / 10*0 /

Fortran 95 の機能として,DATA 文を使ってポインタを空状態に初期化することができます。

	INTEGER, POINTER :: P
	DATA P/NULL()/
	END