文:プログラムの実行前に,変数に初期値を割り付けます。
形式
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 文が初期値設定プログラム単位中にある場合を除く)
無名共通ブロック中の変数
名前付き共通ブロック中の変数を除き,名前付き変数は,そのいずれかの部分が DATA 文中で初期化されている場合,SAVE 属性を持ちます。このプロパティを追認するには,SAVE 文か,SAVE 属性を含んでいる型宣言文でその変数を指定します。
DATA 文に添字なしの配列名が現れた場合,値はその配列の個々の要素に,添字の進行順序に従って代入されます。結合された定数並びは,配列を充填するのに十分な数の値を含んでいなくてはなりません。
配列要素値は 3 つの方法で初期化することができます。名前による方法,要素による方法,または DO 形反復による方法 (DO 構文と同じように解釈されます) です。
変数および定数並び項目には,以下の変換規則と制約が適用されます。
定数と変数の両方が数値型である場合,次の変換が行われます。
定数値は,必要ならば,初期化される変数のデータ型に変換されます。
変数または配列要素に 2 進,8 進,または 16 進定数が代入される場合,代入可能なけた数は,データ項目のデータ型に依存します。定数が変数または配列要素の容量よりも少ないけた数しか含んでいない場合,定数は左側にゼロを付けて拡張されます。定数が格納可能な数以上のけたを含んでいる場合,定数は左側で切り捨てられます。
定数と変数の両方が文字型である場合,次の変換が行われます。
定数の長さが変数の長さよりも小さい場合,変数の右側の文字位置が空白文字で初期化されます。
定数の長さが変数の長さよりも大きい場合,文字定数が右側で切り捨てられます。
定数が数値型で,変数が文字型である場合,以下の制約が適用されます。
文字変数の長さは 1 文字でなくてはなりません。
定数は整数,2 進,8 進,または 16 進定数で,0 ~ 255 の範囲の値でなくてはなりません。
定数と変数がこれらの制約に従っていれば,変数は定数によって宣言される ASCII コード文字に初期化されます (これにより,文字オブジェクトを任意の 8 ビット ASCII コードに初期化することができます)。
ホレリスまたは文字定数が,変数または配列要素の容量よりも少ない文字数しか含んでいない場合,定数は右側に空白文字を付けて拡張されます。定数が格納可能な数以上の文字を含んでいる場合,定数は右側で切り捨てられます。
互換性
CONSOLE STANDARD GRAPHICS QUICKWIN GRAPHICS WINDOWS DLL LIB
関連情報
CHARACTER,COMMON,COMPLEX,I/O 並び,INTEGER,REAL,データ型,定数,および変数
例
次の例は,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 文は,文字変数 BELL,TAB,LF,および 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 に初期化されます。構造体 myname と yours は,構造型 member を使って宣言されています。構造型変数 myname は,構造体構成子で初期化されます。構造型変数 yours は,各成分に対して個別に値を与えることで初期化されます。
前述の例の第 1 DATA 文は,以下のように書くこともできます。
DATA name / 'JOHN DOE' / DATA miles / 10*0 /
Fortran 95 の機能として,DATA 文を使ってポインタを空状態に初期化することができます。
INTEGER, POINTER :: P DATA P/NULL()/ END