配列
Apache OpenOffice Basic では、単純型変数 (スカラー) の他に、配列 (データフィールド) もサポートしています。1 つのデータフィールド内には複数の値を格納することが可\'94\'5cで、これらの各要素に対してはインデックス指定によりアクセスします。
1 次元配列
配列の宣言法は、通常の変数と基本的には同じです。ただし、配列名に続けて、配列の要素数をかっこで囲んで指定する点が異なります。配列は以下のようにして宣言します。
Dim MyArray(3)
この場合の配列は、MyArray(0)、MyArray(1)、MyArray(2)、MyArray(3) という 4 つの要素を持つ、バリアント型変数として宣言されます。
▼また配列を宣言する際には、特定の変数型を指定することも可\'94\'5cです。たとえば以下の例では 4 つの整数変数をとるよう配列を宣言しています。
Dim MyInteger(3) As Integer
これまでに説明した配列宣言の例では、インデックスの開始値として、標準値である 0 が使われています。このようなインデックスの開始および終了値は、配列 (データフィールド) の宣言時に指定することができます。以下の例は 6 つの整数値を取るデータフィールドを作成するものですが、宣言をする際にインデックス範囲を 5 から 10 とするよう指定しています。
Dim MyInteger(5 To 10)
インデックス値には、正の値以外を使うことも可能です。以下の例では、インデックス範囲に負の値を指定していますが、これも有効な宣言として処理されます。
Dim MyInteger(-10 To -5)
この場合、データフィールド (配列) のインデックス値は -10 から -5 までの整数値を取り、合計 6 つの要素を持つことになります。
データフィールド (配列) のインデックスについては、以下の 3 つの制限があります。
- インデックスとして使用可能な最小値は -32768 まで。
- インデックスとして使用可能な最大値は 32767 まで。
- 要素数 (データフィールドの次元) の最大値は 16368 まで。
インデックスの開始値に関する設定
通常、データフィールド (配列) のインデックスには、0 から始まる値が割り当てられます。この開始値については、以下のように指定することにより、すべてのデータフィールド宣言において 1 とするよう変更できます。
Option Base 1
この変更をモジュール内のすべての配列宣言に対して適用させるには、モジュールのヘッダ部で指定する必要があります。ただしこの変更は、Apache OpenOffice API で指定する UNO シーケンスに対しては無効で、これらのインデックスは常に 0 から始められます。このため Option Base 1 を指定すると、インデックスの開始値が混在する危険性があります。
Option Base 1 による設定は、インデックスの開始値を変更するだけであり、配列の要素数には影響しません。たとえば、以下のサンプルコードのように配列を宣言したとします。
Option Base 1 ' ... Dim MyInteger(3)
この場合、MyInteger(1)、MyInteger(2)、MyInteger(3)、MyInteger(4) という 4 つの要素を持つ配列が作成されます。
多次元データフィールド
Apache OpenOffice Basic では 1 次元データフィールド (配列) の他に、多次元データフィールドもサポートしています。個々の次元の指定は、コン\'83\'7d記号で区切ります。以下のサンプルコードは、これらの使用例です。
Dim MyIntArray(5, 5)
ここでは 2 次元の配列を作成し、個々の次元に 6 つの要素 (インデックス値の 0 から 5) を確保しています。この配列全体としては 6 × 6 = 36 個の値を格納することができます。
Apache OpenOffice Basic では、数百次元にも及ぶ多次元配列を宣言することも可能ですが、実際には使用可能なメモリ量により、次元数に制限が課されることになります。
データフィールドのサイズの動的変更
これまでに説明した例では、特定のサイズを持つデータフィールド (配列) を扱ってきました。このような配列以外にも、データフィールドのサイズを動的に変更させることが可\'94\'5cです。たとえば、A という文字で開始するテキストで、すべての単語を含む配列を定義することができます。これらの単語の数は最初はわからないため、後でフィールドの上限を変更する必要があります。このような配列を作成するには、Apache OpenOffice Basic では以下のように宣言します。
ReDim MyArray(10)
以下のサンプルコードでは、最初に作成した配列のサイズを何度か変更して、それぞれ 11 個および 21 個の値を格納できるようにします。
Dim MyArray(4) As Integer ' Declaration with five elements ' ... ReDim MyArray(10) As Integer ' Increase to 11 elements ' ... ReDim MyArray(20) As Integer ' Increase to 21 elements
配列のサイズを変更する際には、これまでの節で説明したすべてのオプションを指定できます。これには、多次元データフィールド化するための指定や、インデックスの開始および終了値の指定などが該当します。なお、データフィールドのサイズを変更すると、格納していたすべてのデータが消失されます。変更前の値を保持させるには、Preserve コマンドを使用します。
Dim MyArray(10) As Integer ' Defining the initial ' dimensions ' ... ReDim Preserve MyArray(20) As Integer ' Increase in ' data field, while ' retaining content
Preserve コマンドを使用する場合は、配列の次元数および変数型が、サイズ変更の前後で同じになっている必要があります。
ReDim と Preserve を併用する場合、データフィールドのデータ型はオリジナルのものから変更することはできません。
Content on this page is licensed under the Public Documentation License (PDL). |