arraySplice関数

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

構文
arraySplice( array, offset, len )
引数
array 必須
offset 必須
len省略可
戻り値

プログラム

UWSC
//////////////////////////////////////////////////
// 【引数】
//   array
//   offset
//   len
// 【戻り値】
//////////////////////////////////////////////////
FUNCTION arraySplice(Var array[], offset, len = NULL)
	DIM tmp[-1]
	IF len = NULL THEN len = UBound(array)
	IF len < 0 THEN len = len + UBound(array)
	FOR i = offset - 1 TO len - 1
		arrayPush(tmp, array[i])
	NEXT
	DIM tmp1[-1]
	FOR i = 0 TO offset - 1
		arrayPush(tmp1, array[i])
	NEXT
	DIM tmp2[-1]
	FOR i = offset + len TO UBound(array)
		arrayPush(tmp2, array[i])
	NEXT
	arrayMerge(tmp1, tmp2)
	SETCLEAR(array)
	RESIZE(array, UBound(tmp1))
	FOR i = 0 TO UBound(tmp1)
		array[i] = tmp1[i]
	NEXT
	RESULT = SLICE(tmp)
FEND

//////////////////////////////////////////////////
// 【引数】
//   arr : 追加される配列(参照引数)
//   tmp : 追加する配列
// 【戻り値】
//   追加した後の配列の要素数
//////////////////////////////////////////////////
FUNCTION arrayMerge(Var arr[], tmp[])
	FOR n = 0 TO UBound(tmp)
		arrayPush(arr, tmp[n])
	NEXT
	RESULT = UBound(arr)
FEND

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数)
//   values : 追加する要素をvalue1から指定
// 【戻り値】
//   処理後の配列の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var array[], value1 = EMPTY, value2 = EMPTY, value3 = EMPTY, value4 = EMPTY, value5 = EMPTY, value6 = EMPTY, value7 = EMPTY, value8 = EMPTY, value9 = EMPTY, value10 = EMPTY, value11 = EMPTY, value12 = EMPTY, value13 = EMPTY, value14 = EMPTY, value15 = EMPTY, value16 = EMPTY)
    DIM i = 1
    WHILE EVAL("value" + i) <> EMPTY
	  DIM res = RESIZE(array, UBound(array) + 1)
	  array[res] = EVAL("value" + i)
	  i = i + 1
	WEND
	RESULT = LENGTH(array)
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