本ページには広告が含まれています。
目次
配列の上限値(最大インデックス)を返します。arraynameに上限値を求める配列の名前、dimensionに上限値を求める配列の次元を指定します。
- 構文
- Integer = UBound( arrayname, dimension )
- 引数
- arrayname (Array)必須
- 上限値を求める配列の名前
- dimension (Integer = 1)省略可
- 返す次元を示す整数
- 戻り値
- 配列の上限値
プログラム
//////////////////////////////////////////////////
// 【引数】
// arrayname : 上限値を求める配列の名前
// dimension : 返す次元を示す整数
// 【戻り値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(arrayname[], dimension = 1)
RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 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
解説
- 2行目
- arraynameの右側にdimensionの数値から1を引いた数だけ[0]を繰り返した文字列を結合し、RESIZE関数 (スクリプト関数)の引数として渡します。一次元目の上限値はRESIZE(arrayname)、二次元目の上限値はRESIZE(arrayname[0])、三次元目の上限値はRESIZE(arrayname[0][0])で求められます。EVAL関数 (スクリプト関数)で文字列で書かれた式を実行することができます。
RESULT = EVAL("RESIZE(arrayname" + strRepeat("[0]", dimension - 1) + ")")
UBound関数とは
UBound関数とは引数に指定した配列で使用できる最大のインデックス番号を返す関数で、配列を扱う場面ではよく使う関数です。
UBoundはUpper(上の)とBound(限界)で上限値を意味しています。
配列の上限値は以下の式から求めることができます。
要素数 = 配列の上限値 - 配列の下限値 + 1
配列の上限値 = 要素数 + 配列の下限値 - 1
配列の上限値 = 要素数 + 配列の下限値 - 1
使い方
一次元配列の上限値を求める
一次元配列arrayの上限値を求めます。DIM 配列名[値]で宣言した場合UBound関数が返す値は、宣言時に指定した値に等しくなります。
DIM array[5]
PRINT UBound(array)
- 結果
5
宣言した配列の次元より一つ大きい次元を指定した場合、上限値は-1を返します。それ以降の次元はエラーを返します。
DIM array[5]
PRINT UBound(array)
PRINT UBound(array, 2)
PRINT UBound(array, 3) // エラー
- 結果
5 -1
多次元配列の上限値を求める
arrayの一次元目と二次元目の上限値を求めます。一次元目を求める場合、第二引数の1は省略することができます。
DIM array[5][8]
PRINT UBound(array)
PRINT UBound(array, 2)
- 結果
5 8
SAFEARRAY関数 (スクリプト関数)で生成した二次元配列の一次元目と二次元目の上限値を求めます。第二引数が一次元目の上限値、第四引数が二次元目の上限値なのでその値が返ります。
DIM array = SAFEARRAY(2, 5, 4, 9)
PRINT UBound(array, 1)
PRINT UBound(array, 2)
- 結果
5 9
プログラム実行例
フォルダ内のファイルを更新日時でソートする
DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace("C:\Program Files (x86)\UWSC")
DIM FolderItems = Folder.Items
HASHTBL iColumn
FOR i = 0 TO 350
iColumn[Folder.GetDetailsOf(EMPTYPARAM, i)] = i
NEXT
DIM filename[-1]
DIM datetime[-1]
FOR i = 0 TO FolderItems.Count - 1
DIM FolderItem = FolderItems.Item(i)
IF FolderItem.isFolder THEN CONTINUE
arrayPush(filename, Folder.GetDetailsOf(FolderItem,iColumn["名前"]))
arrayPush(datetime, Folder.GetDetailsOf(FolderItem, iColumn["更新日時"]))
NEXT
QSORT(datetime, QSRT_NATURALA, filename)
FOR i = 0 TO UBound(filename)
PRINT filename[i] + "<#TAB>" + datetime[i]
NEXT
//////////////////////////////////////////////////
// 【引数】
// 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
結果
UDebug.chm 2014/05/11 1:58
RecIE.chm 2014/05/11 1:58
Uws2Exe.chm 2015/08/13 16:12
RecUws.dll 2016/03/25 4:57
UWSC.exe 2016/10/15 13:33
Uws2Exe.exe 2016/10/15 13:34
RecIE.exe 2016/10/15 13:35
UDebug.exe 2016/10/15 13:37
XRef.exe 2016/10/15 13:38
Readme.txt 2016/10/15 13:39
uwsc.chm 2016/10/15 13:41
unins000.exe 2018/06/27 12:48
unins000.dat 2018/06/27 12:49
使用関数
テキストファイルの内容を行毎にソートして出力する
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ)
DIM array[-1]
FOR i = 1 TO FGET(FID, F_LINECOUNT)
arrayPush(array, FGET(FiD, i))
NEXT
FCLOSE(FID)
QSORT(array, QSRT_A)
FOR i = 0 TO UBound(array)
PRINT array[i]
NEXT
//////////////////////////////////////////////////
// 【引数】
// 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
使用関数
テキストファイルの内容を行毎にソートして書き換える
DIM FID = FOPEN("D:\Documents\sample.txt", F_READ OR F_WRITE)
DIM array[-1]
FOR i = 1 TO FGET(FID, F_LINECOUNT)
arrayPush(array, FGET(FiD, i))
NEXT
QSORT(array, QSRT_A)
FPUT(FID, "", F_ALLTEXT)
FOR i = 0 TO UBound(array)
FPUT(FID, array[i], i + 1)
NEXT
FCLOSE(FID)
//////////////////////////////////////////////////
// 【引数】
// 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
使用関数
関連記事
- CALCARRAY関数 (スクリプト関数)
- 配列の合計値・最小値・最大値・平均値を求めます。
- GETALLWIN関数 (スクリプト関数)
- 全ウィンドウのIDを取得します。
- GETOLEITEM関数 (スクリプト関数)
- JOIN関数 (スクリプト関数)
- 引数に指定した配列を結合し文字列を返します。
- SETCLEAR関数 (スクリプト関数)
- 配列のすべての要素を任意の値で埋めます。
- SHIFTARRAY関数 (スクリプト関数)
- 配列を指定した値だけシフトします。プラス値で後方、マイナス値で前方にシフトします。
- 連想配列
- 連想配列とは、自動的に割り当てられる数字をキーとして持つかわりに、自由に任意の文字列を割り振ることができる配列のことです。添え字に番号の変わりに名前をつけることでわかりやすく管理することができます。
- divisors関数 (自作関数)
- 引数に指定した数値の約数のリストを返します。
- LENGTH関数 (スクリプト関数)
- POPUPMENU関数 (スクリプト関数)
- ポップアップメニューを表示し、引数に指定した配列の中から選択された項目の要素番号を取得します。選択された項目を取得したい場合は、POPUPMENUの戻値を引数に指定した配列の要素番号として指定します。