DIM[ENSION] matrix (rows, columns) [ , matrix (rows, columns) ...]
DIM[ENSION] vector (subscript) [ , vector (subscript) ...]
DIMENSION ステートメントを使用すると、プログラム内で配列を参照する前に、配列変数の次元を定義できます。 マトリックス (2 次元配列) に対して DIMENSION ステートメントを使用すると、配列のエレメントに使用できる行および列の最大数を設定できます。 ベクトル (1 次元配列) に対して DIMENSION ステートメントを使用すると、配列の添え字の最大値 (つまり、最大エレメント数) を設定できます。
matrix と vector は、いずれかの有効な変数名です。最大の次元数は、有効な数式で表せる範囲です。 マトリックスの 2 つの次元を指定する際は、行の式と列の式をコンマで区切る必要があります。 これらの式をインデックスと呼びます。
1 つの DIMENSION ステートメントで、複数の配列を定義することもできます。 この場合は、配列定義をコンマで区切る必要があります。
DIMENSION ステートメントでは、配列の名前とサイズだけが宣言されます。 配列のエレメントには値は割り当てられません。 エレメントへの値の割り当ては、MAT ステートメント、MATPARSE ステートメント、MATREAD ステートメント、MATREADU ステートメント、および割り当てステートメントによって行われます。
IDEAL および INFORMATION フレーバー・アカウントでは、DIMENSION ステートメントは実行時に実行されます。InfoSphere® DataStage® がこのステートメントを扱う方法による利点は、DIM ステートメントが実行されるまでは、割り振られるメモリー大きさが決まらないという点です。これによって、配列の次元を実行時に変更することが可能となります。
配列の次元を変更する際は、エレメント、行、列 (またはこれら組み合わせ) の最大数を変更できます。また、次元数自体を変更することもできます。つまり、1 次元を 2 次元に変更したり、2 次元を 1 次元に変更したりできます。
次元の変更に伴い、配列エレメントの値は次のように処理されます。
配列に必要となるメモリー容量が不足すると、DIMENSION ステートメントは失敗します。これが起きると、INMAT 関数が値 1 に設定されます。
CALL ステートメントの引数としてサブルーチンに配列全体を渡した場合、この配列の次元をサブルーチン内で変更することはできません。 サブルーチンで使用する配列の次元は、一度に設定する必要があります。サブルーチン DIMENSION ステートメントで宣言された次元は無視されますが、配列がサブルーチンに引数として渡される場合は別です (詳しくは、CALL ステートメントを参照してください)。
PICK、IN2、および REALITY フレーバー・アカウントでは、配列は実行時ではなくコンパイル時に作成されます。 したがって、配列の次元は変更できません。またゼロ・エレメントはありません。INFORMATION または IDEAL フレーバー・アカウントで同じ特性を取得するには、$OPTIONS ステートメントの STATIC.DIM オプションを使用します。
DIM ARRAY(2,2)
ARRAY(1,1)="KK"
ARRAY(1,2)="GG"
ARRAY(2,1)="MM"
ARRAY(2,2)="NN"
次の例では、マトリックス内の未割り当てエレメントに関して警告メッセージが表示されます。エレメントの値には空白ストリングが割り当てられます。
DIM ARRAY(2,3)
*
PRINT
FOR X=1 TO 2
FOR Y=1 TO 3
PRINT "ARRAY(":X:",":Y:")", ARRAY(X,Y)
NEXT Y
NEXT X
DIM S(3,2)
S(1,1)=1
S(1,2)=2
S(2,1)=3
S(2,2)=4
S(3,1)=5
S(3,2)=6
次の例では、共通エレメントが保持されます。新しいマトリックス (S(3,1), S(3,2)) で参照できないこれらのエレメントは消失します。
DIM S(2,2)
*
PRINT
FOR X=1 TO 2
FOR Y=1 TO 2
PRINT "S(":X:",":Y:")", S(X,Y)
NEXT Y
NEXT X
次のプログラム出力が得られます。
ARRAY(1,1) KK
ARRAY(1,2) GG
ARRAY(1,3) Program 'DYNAMIC.DIMENSION':
Line 12, Variable previously undefined, empty string
used.
ARRAY(2,1) MM
ARRAY(2,2) NN
ARRAY(2,3) Program 'DYNAMIC.DIMENSION':
Line 12, Variable previously undefined, empty string
used.
S(1,1) 1
S(1,2) 2
S(2,1) 3
S(2,2) 4