Contents
セレクトボックスを表示します。第一引数に選択肢の種別、第二引数にタイムアウト時間、第三引数が数値ならx座標、第四引数にy座標、第三引数が数値でなければメッセージ、メッセージの次の引数に項目を指定します。
- 構文
- Integer = SLCTBOX( 種別, タイムアウト秒, [メッセージ], 項目, [項目, 項目, …] )
もしくは
Integer = SLCTBOX( 種別, タイムアウト秒, x, y, [メッセージ], 項目, [項目, 項目, …] )
- 引数
- 種別
- SLCT_BTN
- ボタン
- SLCT_CHK
- チェックボタン
- SLCT_RDO
- ラジオボタン
- SLCT_CMB
- コンボボックス
- SLCT_LST
- リストボックス
- SLCT_STR
- 戻り値を項目名で返す(他の種別に付加して使用)
- SLCT_NUM
- 戻り値を位置数で返す(他の種別に更かして使用)
- タイムアウト
- 指定時間(秒)を過ぎるとゼロを返す
- x, y
- 第3引数と第4引数が数値であれば X位置,Y位置指定と判断 (デフォルトは中央、 -1,-1にて前回位置)
- メッセージ
- 表示メッセージ
- 項目
- 選択項目名(配列変数で渡す事も可)
- 戻値
- 1つ目が選択されたならば SLCT_1 が返される
2つ目が選択されたならば SLCT_2 が返される
:
SLCT_CHK (チェックボックス)選択時はビット演算して返される
SLCT_STR 付加時は項目名で返される (複数選択時はタブにて結合される)
SLCT_NUM 付加時は位置数で返される (複数選択時はタブにて結合される)
閉じボタンによる終了時は-1を返してくる (SLCT_CHKにてビットチェックする場合は注意)項目数は最大31まで (SLCT_STR、SLCT_NUM の場合は制限なし)
プログラム実行例
じゃんけん
player-com | com | |||
---|---|---|---|---|
グー(0) | チョキ(1) | パー(2) | ||
player | グー(0) | あいこ(0) | 勝ち(-1) | 負け(-2) |
チョキ(1) | 負け(1) | あいこ(0) | 勝ち(-1) | |
パー(2) | 勝ち(2) | 負け(1) | あいこ(0) |
(player-com+3) MOD 3 | com | |||
---|---|---|---|---|
グー(0) | チョキ(1) | パー(2) | ||
player | グー(0) | あいこ(0) | 勝ち(2) | 負け(1) |
チョキ(1) | 負け(1) | あいこ(0) | 勝ち(2) | |
パー(2) | 勝ち(2) | 負け(1) | あいこ(0) |
DIM janken[2] = "グー", "チョキ", "パー"
DIM res[2] = "あいこ", "負け", "勝ち"
REPEAT
DIM player = SLCTBOX(SLCT_BTN OR SLCT_NUM, 0, "出す手を選んでください", janken)
PRINT "プレイヤー<#TAB>" + janken[player]
DIM com = RANDOM(3) // 0〜2の間でランダムな数値を取得
PRINT "コンピュータ<#TAB>" + janken[com]
DIM n = (player - com + 3) MOD 3 // 【勝敗判定】0 : あいこ、1 : 負け、2 : 勝ち
PRINT "結果<#TAB><#TAB>" + res[n]
PRINT "----------"
UNTIL n <> 0 // あいこ(0)以外になるまで続ける
- 結果
- プレイヤー グー
コンピュータ グー
結果 あいこ
----------
プレイヤー チョキ
コンピュータ パー
結果 勝ち
----------
ハイアンドロー
DIM cards[-1]
DIM mark[3] = "♠", "♥", "♣", "♦"
FOR item IN mark
FOR n = 1 TO 13
arrayPush(cards, item + n)
NEXT
NEXT
FisherYates(cards)
FOR n = 0 TO UBound(cards) - 1
DIM res = SLCTBOX(SLCT_BTN OR SLCT_NUM, 0, "次のカードは「 " + cards[n] + " 」よりHIGH、LOW?", "HIGH", "LOW")
PRINT cards[n] + "<#TAB>" + COPY(cards[n], 2)
PRINT cards[n+1] + "<#TAB>" + COPY(cards[n+1], 2)
DIM before = VAL(COPY(cards[n], 2))
DIM after = VAL(COPY(cards[n+1], 2))
IF res = 0 THEN operator = "<"
IF res = 1 THEN operator = ">"
res = IIF(before + operator + "=" + after, "正解", "不正解")
PRINT res
IF res = "不正解" THEN EXIT
PRINT "----------"
NEXT
MSGBOX("全問正解!!!")
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// var arr[] : シャッフルする配列(参照引数)
// 【戻値】
//
//////////////////////////////////////////////////
PROCEDURE FisherYates(var arr[])
FOR n = UBound(arr) TO 0 STEP -1
DIM num = RANDOM(n+1)
DIM tmp = arr[n]
arr[n] = arr[num]
arr[num] = tmp
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// expr : 評価する式
// truepart : 評価した式がTrueのときに返す値
// falsepart : 評価した式がFalseのときに返す値
// 【戻値】
// truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
IFB EVAL(expr) THEN
RESULT = truepart
ELSE
RESULT = falsepart
ENDIF
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
- 結果
- ♦12 12
♠1 1
正解
----------
♠1 1
♥7 7
正解
----------
♥7 7
♥13 13
正解
----------
♥13 13
♦9 9
正解
----------
♦9 9
♥1 1
正解
----------
♥1 1
♥5 5
正解
----------
♥5 5
♥10 10
正解
----------
♥10 10
♣4 4
正解
----------
♣4 4
♠10 10
正解
----------
♠10 10
♥6 6
不正解
総段落数を取得
CONST wdDoNotSaveChanges = 0
CONST wdSaveChanges = -1
DIM arr[-1]
FOR n = 0 TO GETALLWIN() - 1
arrayPush(arr, ALL_WIN_ID[n])
NEXT
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
QSORT(arr, QSRT_A)
TRY
DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
MSGBOX("操作する文書を開いてださい。")
EXIT
ENDTRY
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
IFB res = -1 THEN
MSGBOX("ファイル名が選択されなかったので終了します。")
EXIT
ENDIF
Word.Documents(res).Activate
PRINT Word.ActiveDocument.Paragraphs.Count
//////////////////////////////////////////////////
// 【引数】
// array : 一次元配列
// callback : コールバック関数。callback内で配列の値は「%val%」で使うことができます。
// 【戻値】
// callback関数によりフィルタ処理が行われた arrayの全ての要素を含む配列を返します。
//////////////////////////////////////////////////
PROCEDURE arrayFilter(var array[], callback)
DIM n = 0
DIM tmp[-1]
FOR %val% IN array
IFB EVAL(callback) THEN
RESIZE(tmp, n)
tmp[n] = %val%
n = n + 1
ENDIF
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// callback : 配列の各要素に適用するコールバック関数
// array : コールバック関数を適用する配列
// 【戻値】
// callback関数を適用した後、 適用後の要素を含む配列
//////////////////////////////////////////////////
PROCEDURE arrayMap(callback, var array[])
DIM tmp[RESIZE(array)]
DIM n = 0
FOR %val% IN array
tmp[n] = EVAL(callback)
n = n + 1
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
指定したキーワードに下線を引く(Word)
CONST wdDoNotSaveChanges = 0 // 保留中の変更を保存しない
CONST wdSaveChanges = -1 // 保留中の変更をユーザーに確認しないで自動的に保存する
CONST wdPromptToSaveChanges = -2 // 保留中の変更を保存するかどうかをユーザーに確認する
CONST wdFindStop = 0
CONST wdCharacter = 1
CONST wdUnderlineSingle = 1
CONST wdCollapseEnd = 0
DIM arr[-1]
// すべてのIDをarr変数に格納
FOR n = 0 TO GETALLWIN() - 1
arrayPush(arr, ALL_WIN_ID[n])
NEXT
// クラス名がOpusApp、通常の表示状態であるものを抽出
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
// IDからタイトルを取得し、そのタイトルから「 - Microsoft Word」を削除
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
QSORT(arr, QSRT_A)
TRY
DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
MSGBOX("操作する文書を開いてください。")
EXIT
ENDTRY
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
IFB res = -1 THEN
MSGBOX("ファイル名が選択されなかったので終了します。")
EXIT
ENDIF
Word.Documents(res).Activate
DIM Document = Word.Application.ActiveDocument
DIM Range = Document.Content
// 下線を引くキーワード
DIM keywords[] = "ギャラリー", "オプション", "テーマ"
FOR item IN keywords
Range.SetRange(0, 0)
WITH Range.Find
.Text = item
.Forward = TRUE
.Wrap = wdFindStop
WHILE .Execute = TRUE
WITH Range
.Expand(wdCharacter) // 範囲
.Underline = wdUnderlineSingle // 下線を引く
.Collapse(wdCollapseEnd)
ENDWITH
WEND
ENDWITH
NEXT
//Word.Documents.Close(wdSaveChanges)
//Word.Quit
//////////////////////////////////////////////////
// 【引数】
// array : 一次元配列
// callback : コールバック関数。callback内で配列の値は「%val%」で使うことができます。
// 【戻値】
// callback関数によりフィルタ処理が行われた arrayの全ての要素を含む配列を返します。
//////////////////////////////////////////////////
PROCEDURE arrayFilter(var array[], callback)
DIM n = 0
DIM tmp[-1]
FOR %val% IN array
IFB EVAL(callback) THEN
RESIZE(tmp, n)
tmp[n] = %val%
n = n + 1
ENDIF
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// callback : 配列の各要素に適用するコールバック関数
// array : コールバック関数を適用する配列
// 【戻値】
// callback関数を適用した後、 適用後の要素を含む配列
//////////////////////////////////////////////////
PROCEDURE arrayMap(callback, var array[])
DIM tmp[RESIZE(array)]
DIM n = 0
FOR %val% IN array
tmp[n] = EVAL(callback)
n = n + 1
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
文字数を出力
CONST wdStatisticWords = 0
DIM arr[-1]
// すべてのIDをarr変数に格納
FOR n = 0 TO GETALLWIN() - 1
arrayPush(arr, ALL_WIN_ID[n])
NEXT
// クラス名がOpusApp、通常の表示状態であるものを抽出
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
// IDか[]らタイトルを取得し、そのタイトルから「 - Microsoft Word」を削除
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
QSORT(arr, QSRT_A)
TRY
DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
MSGBOX("操作する文書を開いてください。")
EXIT
ENDTRY
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
IFB res = -1 THEN
MSGBOX("ファイル名が選択されなかったので終了します。")
EXIT
ENDIF
DIM Range = Word.ActiveDocument.Range
PRINT Range.ComputeStatistics(wdStatisticWords)
//////////////////////////////////////////////////
// 【引数】
// array : 一次元配列
// callback : コールバック関数。callback内で配列の値は「%val%」で使うことができます。
// 【戻値】
// callback関数によりフィルタ処理が行われた arrayの全ての要素を含む配列を返します。
//////////////////////////////////////////////////
PROCEDURE arrayFilter(var array[], callback)
DIM n = 0
DIM tmp[-1]
FOR %val% IN array
IFB EVAL(callback) THEN
RESIZE(tmp, n)
tmp[n] = %val%
n = n + 1
ENDIF
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// callback : 配列の各要素に適用するコールバック関数
// array : コールバック関数を適用する配列
// 【戻値】
// callback関数を適用した後、 適用後の要素を含む配列
//////////////////////////////////////////////////
PROCEDURE arrayMap(callback, var array[])
DIM tmp[RESIZE(array)]
DIM n = 0
FOR %val% IN array
tmp[n] = EVAL(callback)
n = n + 1
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
- 結果
- 469
文章校正をする
CONST wdDoNotSaveChanges = 0 // 保留中の変更を保存しない
CONST wdSaveChanges = -1 // 保留中の変更をユーザーに確認しないで自動的に保存する
CONST wdPromptToSaveChanges = -2 // 保留中の変更を保存するかどうかをユーザーに確認する
DIM arr[-1]
// すべてのIDをarr変数に格納
FOR n = 0 TO GETALLWIN() - 1
arrayPush(arr, ALL_WIN_ID[n])
NEXT
// クラス名がOpusApp、通常の表示状態であるものを抽出
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
// IDからタイトルを取得し、そのタイトルから「 - Microsoft Word」を削除
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
QSORT(arr, QSRT_A)
TRY
DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
MSGBOX("操作する文書を開いてください。")
EXIT
ENDTRY
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
IFB res = -1 THEN
MSGBOX("ファイル名が選択されなかったので終了します。")
EXIT
ENDIF
DIM Document = Word.Application.ActiveDocument
Document.CheckGrammar
//Word.Documents.Close(wdSaveChanges)
//Word.Quit
//////////////////////////////////////////////////
// 【引数】
// array : 一次元配列
// callback : コールバック関数。callback内で配列の値は「%val%」で使うことができます。
// 【戻値】
// callback関数によりフィルタ処理が行われた arrayの全ての要素を含む配列を返します。
//////////////////////////////////////////////////
PROCEDURE arrayFilter(var array[], callback)
DIM n = 0
DIM tmp[-1]
FOR %val% IN array
IFB EVAL(callback) THEN
RESIZE(tmp, n)
tmp[n] = %val%
n = n + 1
ENDIF
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// callback : 配列の各要素に適用するコールバック関数
// array : コールバック関数を適用する配列
// 【戻値】
// callback関数を適用した後、 適用後の要素を含む配列
//////////////////////////////////////////////////
PROCEDURE arrayMap(callback, var array[])
DIM tmp[RESIZE(array)]
DIM n = 0
FOR %val% IN array
tmp[n] = EVAL(callback)
n = n + 1
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
カーソル位置の文章を取得
DIM arr[-1]
FOR n = 0 TO GETALLWIN() - 1
arrayPush(arr, ALL_WIN_ID[n])
NEXT
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
QSORT(arr, QSRT_A)
TRY
DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
MSGBOX("操作する文書を開いてださい。")
EXIT
ENDTRY
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
IFB res = -1 THEN
MSGBOX("ファイル名が選択されなかったので終了します。")
EXIT
ENDIF
PRINT Word.Selection.Sentences(1).Text
//////////////////////////////////////////////////
// 【引数】
// array : 一次元配列
// callback : コールバック関数。callback内で配列の値は「%val%」で使うことができます。
// 【戻値】
// callback関数によりフィルタ処理が行われた arrayの全ての要素を含む配列を返します。
//////////////////////////////////////////////////
PROCEDURE arrayFilter(var array[], callback)
DIM n = 0
DIM tmp[-1]
FOR %val% IN array
IFB EVAL(callback) THEN
RESIZE(tmp, n)
tmp[n] = %val%
n = n + 1
ENDIF
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// callback : 配列の各要素に適用するコールバック関数
// array : コールバック関数を適用する配列
// 【戻値】
// callback関数を適用した後、 適用後の要素を含む配列
//////////////////////////////////////////////////
PROCEDURE arrayMap(callback, var array[])
DIM tmp[RESIZE(array)]
DIM n = 0
FOR %val% IN array
tmp[n] = EVAL(callback)
n = n + 1
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
カーソル位置の段落番号を取得
DIM arr[-1]
FOR n = 0 TO GETALLWIN() - 1
arrayPush(arr, ALL_WIN_ID[n])
NEXT
arrayFilter(arr, "STATUS(%val%, ST_CLASS) = <#DBL>OpusApp<#DBL> AND STATUS(%val%, ST_VISIBLE)")
arrayMap("REPLACE(STATUS(%val%, ST_TITLE), <#DBL> - Microsoft Word<#DBL>, <#DBL><#DBL>)", arr)
QSORT(arr, QSRT_A)
TRY
DIM Word = GETACTIVEOLEOBJ("Word.Application")
EXCEPT
MSGBOX("操作する文書を開いてださい。")
EXIT
ENDTRY
DIM res = SLCTBOX(SLCT_RDO OR SLCT_STR, 0, "操作する文書を選択", arr)
IFB res = -1 THEN
MSGBOX("ファイル名が選択されなかったので終了します。")
EXIT
ENDIF
DIM Range = Word.Selection.Range
Range.Start = 0
PRINT Range.Paragraphs.Count
//////////////////////////////////////////////////
// 【引数】
// array : 一次元配列
// callback : コールバック関数。callback内で配列の値は「%val%」で使うことができます。
// 【戻値】
// callback関数によりフィルタ処理が行われた arrayの全ての要素を含む配列を返します。
//////////////////////////////////////////////////
PROCEDURE arrayFilter(var array[], callback)
DIM n = 0
DIM tmp[-1]
FOR %val% IN array
IFB EVAL(callback) THEN
RESIZE(tmp, n)
tmp[n] = %val%
n = n + 1
ENDIF
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// callback : 配列の各要素に適用するコールバック関数
// array : コールバック関数を適用する配列
// 【戻値】
// callback関数を適用した後、 適用後の要素を含む配列
//////////////////////////////////////////////////
PROCEDURE arrayMap(callback, var array[])
DIM tmp[RESIZE(array)]
DIM n = 0
FOR %val% IN array
tmp[n] = EVAL(callback)
n = n + 1
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
この記事は役に立ちましたか?