Contents
コールバック関数を使用して、配列の要素をフィルタリングします。
- 構文
- arrayFilter( var array[], callback )
- 引数
- array
- 一次元配列
- callback
- コールバック関数。callback内で配列の値は「%val%」で使うことができます。
- 戻値
- callback関数によりフィルタ処理が行われた arrayの全ての要素を含む配列を返します。
プログラム
//////////////////////////////////////////////////
// 【引数】
// 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
プログラム実行例
配列の中から偶数のみ抽出
DIM arr[] = 42, 64, 6, 67, 43, 96, 29, 84, 79, 11
arrayFilter(arr, "%val% MOD 2 = 0")
FOR item IN arr
PRINT item
NEXT
//////////////////////////////////////////////////
// 【引数】
// 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
- 結果
- 42
64
6
96
84
内部リンクを取得
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://example.com")
BusyWait(IE)
DIM links[-1]
FOR n = 0 TO IE.document.links.length - 1
arrayPush(links, IE.document.links[n].href)
NEXT
arrayFilter(links, "POS(<#DBL>" + IE.document.domain + "<#DBL>, %val%)")
FOR item IN links
PRINT item
NEXT
IE.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
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// IE : IEオブジェクト
// 【戻値】
//
//////////////////////////////////////////////////
PROCEDURE BusyWait(Var IE)
SLEEP(0.500)
DIM t = GETTIME()
TRY
REPEAT
DIM tm = GETTIME() - t
FUKIDASI("BusyWait:" + tm)
SLEEP(0.010)
IF tm >= 60 THEN BREAK
UNTIL !IE.Busy AND IE.readyState = 4
EXCEPT
IE = getIEObj(-1)
PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
BusyWait(IE)
ENDTRY
FUKIDASI()
FEND
//////////////////////////////////////////////////
// 【引数】
// 文字列 or 数値 : 取得したいIEオブジェクトのタイトル・URLもしくは数値を指定
// 完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得)
// 【戻値】
// Internet Explorerオブジェクト
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
DIM Shell = CREATEOLEOBJ("Shell.Application")
SELECT CHKNUM(str)
CASE TRUE
DIM cnt = 0
SELECT TRUE
CASE str > 0
FOR n = 0 TO Shell.Windows.Count - 1
TRY
IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
cnt = cnt + 1
IFB str = cnt THEN
RESULT = Shell.Windows.Item(n)
EXIT
ENDIF
ENDIF
EXCEPT
ENDTRY
NEXT
CASE str < 0
FOR n = Shell.Windows.Count - 1 TO 0 STEP -1
TRY
IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
cnt = cnt + 1
IFB ABS(str) = cnt THEN
RESULT = Shell.Windows.Item(n)
EXIT
ENDIF
ENDIF
EXCEPT
ENDTRY
NEXT
CASE str = 0
FOR n = 0 TO Shell.Windows.Count - 1
TRY
IF Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1
EXCEPT
ENDTRY
NEXT
RESULT = cnt
EXIT
SELEND
CASE FALSE
DIM t = GETTIME()
REPEAT
FOR n = 0 TO Shell.Windows.Count - 1
TRY
DIM targetObj = Shell.Windows.Item(n)
IFB targetObj.Name = "Internet Explorer" THEN
SELECT flg
CASE TRUE
IFB targetObj.document.title = str OR targetObj.LocationURL = str THEN
RESULT = Shell.Windows.Item(n)
EXIT
ENDIF
CASE FALSE
IFB POS(str, targetObj.document.title) OR POS(str, targetObj.LocationURL) THEN
RESULT = Shell.Windows.Item(n)
EXIT
ENDIF
SELEND
ENDIF
EXCEPT
ENDTRY
NEXT
UNTIL GETTIME() - t >= 5
SELEND
RESULT = ERR_VALUE
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
外部リンクを取得
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://example.com")
BusyWait(IE)
DIM links[-1]
FOR n = 0 TO IE.document.links.length - 1
arrayPush(links, IE.document.links[n].href)
NEXT
arrayFilter(links, "!POS(<#DBL>" + IE.document.domain + "<#DBL>, %val%)")
FOR item IN links
PRINT item
NEXT
IE.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
//////////////////////////////////////////////////
// 【引数】
// array : 要素を追加する配列(参照引数)
// str : 追加する要素
// 【戻値】
// 処理後の配列の中の要素の数
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
DIM res = RESIZE(arr, UBound(arr) + 1)
arr[res] = str
RESULT = res + 1
FEND
//////////////////////////////////////////////////
// 【引数】
// IE : IEオブジェクト
// 【戻値】
//
//////////////////////////////////////////////////
PROCEDURE BusyWait(Var IE)
SLEEP(0.500)
DIM t = GETTIME()
TRY
REPEAT
DIM tm = GETTIME() - t
FUKIDASI("BusyWait:" + tm)
SLEEP(0.010)
IF tm >= 60 THEN BREAK
UNTIL !IE.Busy AND IE.readyState = 4
EXCEPT
IE = getIEObj(-1)
PRINT IE.document.URL + " のIEオブジェクトを取得しました。"
BusyWait(IE)
ENDTRY
FUKIDASI()
FEND
//////////////////////////////////////////////////
// 【引数】
// 文字列 or 数値 : 取得したいIEオブジェクトのタイトル・URLもしくは数値を指定
// 完全一致フラグ : (TRUE : 文字列が完全一致したものを取得、FALSE : 文字列の一部を含むものを取得)
// 【戻値】
// Internet Explorerオブジェクト
//////////////////////////////////////////////////
FUNCTION getIEObj(str, flg = FALSE)
DIM Shell = CREATEOLEOBJ("Shell.Application")
SELECT CHKNUM(str)
CASE TRUE
DIM cnt = 0
SELECT TRUE
CASE str > 0
FOR n = 0 TO Shell.Windows.Count - 1
TRY
IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
cnt = cnt + 1
IFB str = cnt THEN
RESULT = Shell.Windows.Item(n)
EXIT
ENDIF
ENDIF
EXCEPT
ENDTRY
NEXT
CASE str < 0
FOR n = Shell.Windows.Count - 1 TO 0 STEP -1
TRY
IFB Shell.Windows.Item(n).Name = "Internet Explorer" THEN
cnt = cnt + 1
IFB ABS(str) = cnt THEN
RESULT = Shell.Windows.Item(n)
EXIT
ENDIF
ENDIF
EXCEPT
ENDTRY
NEXT
CASE str = 0
FOR n = 0 TO Shell.Windows.Count - 1
TRY
IF Shell.Windows.Item(n).Name = "Internet Explorer" THEN cnt = cnt + 1
EXCEPT
ENDTRY
NEXT
RESULT = cnt
EXIT
SELEND
CASE FALSE
DIM t = GETTIME()
REPEAT
FOR n = 0 TO Shell.Windows.Count - 1
TRY
DIM targetObj = Shell.Windows.Item(n)
IFB targetObj.Name = "Internet Explorer" THEN
SELECT flg
CASE TRUE
IFB targetObj.document.title = str OR targetObj.LocationURL = str THEN
RESULT = Shell.Windows.Item(n)
EXIT
ENDIF
CASE FALSE
IFB POS(str, targetObj.document.title) OR POS(str, targetObj.LocationURL) THEN
RESULT = Shell.Windows.Item(n)
EXIT
ENDIF
SELEND
ENDIF
EXCEPT
ENDTRY
NEXT
UNTIL GETTIME() - t >= 5
SELEND
RESULT = ERR_VALUE
FEND
//////////////////////////////////////////////////
// 【引数】
// 配列 : 上限値を求める配列
// 【戻値】
// 配列の上限値
//////////////////////////////////////////////////
FUNCTION UBound(array[])
RESULT = RESIZE(array)
FEND
総段落数を取得
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
この記事は役に立ちましたか?