バージョン 6.3.3
 —  ステートメント  —

配列の次元の定義

array-dimension-definition は次のステートメントで使用します。DEFINE DATA OBJECT、および DEFINE DATA LOCALDEFINE DATA INDEPENDENTDEFINE DATA CONTEXTDEFINE DATA OBJECT variable-definition オプション。また、DEFINE FUNCTION ステートメントでも使用します。

array-dimension-definition の構文は、次のとおりです。

{bound[:bound]},../graphics/dot3.gif 3

このドキュメントでは、次のトピックについて説明します。


機能

array-dimension-definition の場合、配列定義の次元の下限と上限を定義します。

最大 3 次元までの配列を定義することができます。

プログラミングガイド』の「配列」も参照してください。

Top of page

構文説明

bound

次のいずれかが境界になります。

  • 整数定数

  • 事前に定義された名前付き定数

  • (データベース配列用に)事前に定義されたユーザー定義変数

  • "*" で拡張可能な境界を定義します。それ以外の場合は、X-array として認識されます。

1 つの境界だけを指定した場合、その値は上限を表し、下限は 1 であると想定されます。

X-Array

配列の少なくとも 1 つの次元で少なくとも 1 つの境界を拡張可能に指定すると、その配列は X-array(eXtensible array)と呼ばれます。 1 つの次元で拡張可能なのは 1 つの境界だけであり(上限または下限のいずれか)、両方を拡張可能にすることはできません。 多次元配列では、例えば #a(1:100, 1:*) のように、定数と拡張可能な境界が混在していることがあります。

例:

DEFINE DATA LOCAL
1 #ARRAY1(I4/1:10)
1 #ARRAY2(I4/10)
1 #X-ARRAY3(I4/1:*)
1 #X-ARRAY4(I4/*,1:5)
1 #X-ARRAY5(I4/*:10)
1 #X-ARRAY6(I4/1:10,100:*,*:1000)
END-DEFINE

次の表に、上記のプログラムで使用する配列の境界をわかりやすく示します。

  次元 1 次元 2 次元 3
下限 上限 下限 上限 下限 上限
#ARRAY1 1 10 - - - -
#ARRAY2 1 10 - - - -
#X-ARRAY3 1 拡張可能 - - - -
#X-ARRAY4 1 拡張可能 1 5 - -
#X-ARRAY5 拡張可能 10 - - - -
#X-ARRAY6 1 10 100 拡張可能 拡張可能 1000

配列定義の例:

#ARRAY2(I4/10)                   /* a one-dimensional array with 10 occurrences (1:10)
#X-ARRAY4(I4/*,1:5)              /* a two-dimensional array
#X-ARRAY6(I4/1:10,100:*,*:1000)  /* a three-dimensional array

パラメータデータエリア内の可変配列

パラメータデータエリアには、可変オカレンス数を含む配列を指定できます。 この指定は、インデックス表記 1:V を使用して行います。

例 1: #ARR01 (A5/1:V)

例 2: #ARR02 (I2/1:V,1:V)

変数インデックス表記 1:V を含むパラメータ配列は、次の長さでのみ再定義できます。

変数インデックス表記 1:V は、再定義の中では使用できません。

例:

DEFINE DATA PARAMETER
 1 #ARR(A6/1:V)
 1 REDEFINE #ARR
   2 #R-ARR(A1/1:V)   /* (1:V) is not allowed in a REDEFINE block 
END-DEFINE

オカレンス数はコンパイル時には不明であるため、ステートメント INPUTWRITEREAD WORK FILE、および WRITE WORK FILE でインデックス表記 (*) を使用してオカレンス数を参照することはできません。 インデックス表記 (*) は、すべての次元に適用されるか、またはどの次元にも適用されないかのいずれかになります。

有効な例:

#ARR01 (*)
#ARR02 (*,*)
#ARR01 (1)
#ARR02 (5,#FIELDX)
#ARR02 (1,1:3)

無効な例:

#ARRAYY (1,*)  /* not allowed

ラインタイムエラーを回避するために、このような配列の最大オカレンス数は、別のパラメータを経由してサブプログラムまたはサブルーチンに渡す必要があります。 代わりに、システム変数 *OCCURRENCE を使用することもできます。

注意:

  1. インデックス "1:V" を含むパラメータデータエリアを使用する場合(つまり、DEFINE DATA LOCAL ステートメントで指定した場合)は、"V" という名前の変数を CONSTANT として定義する必要があります。
  2. ダイアログでは、インデックス "1:V" を BY VALUE と一緒に使用することはできません。

Top of page