arrayMap

構文
arrayMap( callback, var array[] )
引数
callback
配列の各要素に適用するコールバック関数
array
コールバック関数を適用する配列
戻値
callback関数を適用した後、 適用後の要素を含む配列

プログラム

//////////////////////////////////////////////////
// 【引数】
//   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

プログラム実行例

指定した色の反転色を求める

DIM color = invertedColor(RGBToColor($e4, $b7, $d8))
DIM rgb = colorToRGB(color)

arrayMap("decToHex(%val%)", rgb)
PRINT "$" + JOIN(rgb, "")
  1. invertedColor
  2. RGBToColor
  3. arrayMap
  4. decToHex
  5. JOIN
結果
$1B4827

今年の十五夜の日付を求める

GETTIME()
DIM year = G_TIME_YY + 1
DIM month = 1
DIM day = 1

REPEAT
	DIM JD = saku(YMDToJD(year, month, day))
	DIM d = JDToYMD(JD)
	year = d[0]
	month = d[1]
	day = d[2]
	DIM date = getKyureki(year, month, day)
UNTIL date[2] = 8

RESIZE(d, 2)
arrayMap("text(%val%, <#DBL>00<#DBL>)", d)
date = JOIN(d, "/")
PRINT dateAdd("d", 14, date)
  1. GETTIME
  2. saku
  3. YMDTojD
  4. JDToYMD
  5. getKyureki
  6. RESIZE
  7. arrayMap
  8. JOIN
  9. dateAdd
  10. text
結果
2020/10/01

今年の春彼岸の日付を求める

翌年1月1日の直前の太陽黄経0度の日付(春分の日)を求め、その日を中日とする前後3を合わせた7日間を求める。

GETTIME()
DIM year = G_TIME_YY + 1
DIM month = 1
DIM day = 1

REPEAT
	DIM chuki = chuki(YMDToJD(year, month, day))
	DIM d = JDToYMD(chuki[0])
	year = d[0]
	month = d[1]
	day = d[2]
UNTIL normalizeAngle(ROUND(chuki[1])) = 0

RESIZE(d, 2)
arrayMap("text(%val%, <#DBL>00<#DBL>)", d)
date = JOIN(d, "/")
PRINT "彼岸入り<#TAB>" + dateAdd("d", -3, date)
PRINT "春分の日<#TAB>" + date
PRINT "彼岸明け<#TAB>" + dateAdd("d", 3, date)
  1. GETTIME
  2. chuki
  3. YMDToJD
  4. JDToYMD
  5. normalizeAngle
  6. ROUND
  7. RESIZE
  8. arrayMap
  9. JOIN
  10. dateAdd
  11. text
結果
彼岸入り	2020/03/17
春分の日	2020/03/20
彼岸明け	2020/03/23

今年の秋彼岸の日付を求める

翌年1月1日の直前の太陽黄経180度の日付(秋分の日)を求め、その日を中日とする前後3日を合わせた7日間を求める。

GETTIME()
DIM year = G_TIME_YY + 1
DIM month = 1
DIM day = 1

REPEAT
	DIM chuki = chuki(YMDToJD(year, month, day))
	DIM d = JDToYMD(chuki[0])
	year = d[0]
	month = d[1]
	day = d[2]
UNTIL normalizeAngle(ROUND(chuki[1])) = 180

RESIZE(d, 2)
arrayMap("text(%val%, <#DBL>00<#DBL>)", d)
date = JOIN(d, "/")
PRINT "彼岸入り<#TAB>" + dateAdd("d", -3, date)
PRINT "秋分の日<#TAB>" + date
PRINT "彼岸明け<#TAB>" + dateAdd("d", 3, date)
  1. GETTIME
  2. chuki
  3. YMDToJD
  4. JDToYMD
  5. normalizeAngle
  6. ROUND
  7. RESIZE
  8. arrayMap
  9. JOIN
  10. dateAdd
  11. text
結果
彼岸入り	2020/09/19
秋分の日	2020/09/22
彼岸明け	2020/09/25

総段落数を取得

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
  1. GETALLWIN
  2. arrayPush
  3. arrayFilter
  4. STATUS
  5. arrayMap
  6. REPLACE
  7. QSORT
  8. GETACTIVEOLEOBJ
  9. MSGBOX
  10. SLCTBOX
  11. Word.Documents
  12. Word.Documents.Item
  13. Word.Document.Activate
  14. Word.Application.ActiveDocument
  15. Word.Document.Paragraphs
  16. Word.Paragraphs.Count

指定したキーワードに下線を引く(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
  1. GETALLWIN
  2. arrayPush
  3. arrayFilter
  4. arrayMap
  5. QSORT
  6. GETACTIVEOLEOBJ
  7. MSGBOX
  8. SLCTBOX
  9. Word.Documents.Item
  10. Word.Document.Activate
  11. Word.Application.ActiveDocument
  12. Word.Document.Content
  13. Word.Range.SetRange
  14. Word.Range.Find
  15. Word.Find.Text
  16. Word.Find.Forward
  17. Word.Find.Wrap
  18. Word.Find.Execute
  19. Word.Range.Expand
  20. Word.Range.Underline
  21. Word.Range.Collapse
  22. Word.Documents.Close
  23. Word.Application.Quit

文字数を出力

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)
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. QSORT
  6. GETACTIVEOLEOBJ
  7. MSGBOX
  8. SLCTBOX
  9. Word.Application.ActiveDocument
  10. Word.Range
  11. Word.Range.ComputeStatistics
結果
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
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. QSORT
  6. GETACTIVEOLEOBJ
  7. MSGBOX
  8. SLCTBOX
  9. Word.Application.ActiveDocument
  10. Word.Document.CheckGrammar

カーソル位置の文章を取得

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
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. REPLACE
  6. QSORT
  7. GETACTIVEOLEOBJ
  8. MSGBOX
  9. SLCTBOX
  10. Word.Selection.Sentences.Text

カーソル位置の段落番号を取得

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
  1. arrayPush
  2. arrayFilter
  3. STATUS
  4. arrayMap
  5. REPLACE
  6. QSORT
  7. GETACTIVEOLEOBJ
  8. MSGBOX
  9. SLCTBOX
  10. Word.Selection.Range
  11. Word.Range.Start
  12. Word.Range.Paragraphs.Count

Was this post helpful?