SAFEARRAYセーフアレイ関数

本ページには広告が含まれています。

指定したサイズの配列を生成します。第三引数・第四引数は省略可能ですが、どちらか片方だけ指定または省略することはできません。

下限値を0以外の配列を生成したいときや、FUNCTION-FENDで二次元配列を戻り値として返す場合に使います。一次元配列を生成する場合はSLICE関数を使います。

構文
  1. safearray = SAFEARRAY( 下限, 上限, 二次元下限, 二次元上限 )
引数
下限 (Integer)必須
配列の下限を設定
上限 (Integer)必須
配列の上限を設定
二次元下限 (Integer)省略可
二次元配列の下限を設定
二次元上限 (Integer)省略可
二次元配列の上限を設定
戻り値
作成されたSAFEARRAY型の配列

使い方

一次元配列

下限値:2、上限値:4の一次元配列を生成します。array[0]array[1]の要素にはアクセスすることはできません。

UWSC
DIM array = SAFEARRAY(2, 4)

array[2] = 2
array[3] = 3
array[4] = 4

FOR item IN array
	PRINT item
NEXT
結果
プレーンテキスト
2
3
4

下限値:0、上限値:5の配列arrayを生成します。

UWSC
DIM array = SAFEARRAY(0, 5)

第一引数の下限値が0の場合、以下のように書くこともできます。この書き方も下限値:0、上限値:5の配列となります。

UWSC
DIM array[5]

以下はどちらも同じ要素を持つ一次元配列を生成することができます。

UWSC
DIM array = SAFEARRAY(0, 上限値)
DIM array[上限値]

二次元配列

一次元目の下限値:2、上限値:4、二次元目の下限値:6、上限値:8の二次元配列を生成します。

UWSC
DIM array = SAFEARRAY(2, 4, 6, 8)

array[2][6] = 1
array[2][7] = 2
array[2][8] = 3
array[3][6] = 4
array[3][7] = 5
array[3][8] = 6
array[4][6] = 7
array[4][7] = 8
array[4][8] = 9


FOR item IN array
	PRINT item
NEXT
結果
プレーンテキスト
1
2
3
4
5
6
7
8
9

第三引数・第四引数を指定することで二次元配列を宣言することができます。以下は一次元目の下限値が0、一次元目の上限値が3、二次元目の下限値が0、二次元目の上限値が5の配列を生成します。

UWSC
DIM array = SAFEARRAY(0, 3, 0, 5)

一次元目、二次元目の下限値が0の場合、以下のように書くこともできます。

UWSC
DIM array[3][5]

以下はどちらも同じ要素を持つ二次元配列を生成することができます。

UWSC
DIM array = SAFEARRAY(0, 一次元上限値, 0, 二次元上限値)
DIM array[一次元上限値][二次元上限値]

プログラム実行例

空の配列を作成

UWSC
DIM arr
arr = SAFEARRAY(0, -1)

PRINT "下限︰" + LBound(arr)
PRINT "上限︰" + UBound(arr)

//////////////////////////////////////////////////
// 【引数】
//   array : 下限値を求める配列の名前 
//   dimension : 返す次元を示す整数 
// 【戻り値】
//   配列の下限値 
//////////////////////////////////////////////////
FUNCTION LBound(arrayname[], dimension = 1)
	RESULT = UBound(arrayname, dimension) - EVAL("LENGTH(arrayname" + strRepeat("[0]", dimension-1) + ")") + 1
FEND

//////////////////////////////////////////////////
// 【引数】
//   inputs : 繰り返す文字列 
//   multiplier : inputsを繰り返す回数 
// 【戻り値】
//   inputsをmultiplier回を繰り返した文字列を返します 
//////////////////////////////////////////////////
FUNCTION strRepeat(inputs, multiplier)
	DIM res = ""
	FOR n = 1 TO multiplier
		res = res + inputs
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   arrayname : 上限値を求める配列の名前 
//   dimension : 返す次元を示す整数 
// 【戻り値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
	RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
FEND
結果
プレーンテキスト
下限︰0
上限︰-1
使用関数

一次元配列を生成

UWSC
DIM arr
arr = SAFEARRAY(3, 6)

arr[3] = 40
arr[4] = 974
arr[5] = 747
arr[6] = 354

FOR item IN arr
	PRINT item
NEXT
結果
プレーンテキスト
40
974
747
354
使用関数