JOIN

タグ:

引数に指定した配列を結合し文字列を返します。

文字列を区切り配列にするには、SPLITを使います。

構文
  1. UString = JOIN( 配列変数, [区切文字列, 空文字処理フラグ, 開始, 終了] )
引数
配列変数
配列変数名
区切文字列
結合に使用する区切文字列(省略時はスペース)
空文字処理フラグ
FALSE
空文字も有効 (デフォルト)
TRUE
空文字は無効として処理しない
開始, 終了
結合する配列の開始位置、終了位置の添え字を指定
戻り値
作成された文字列 

プログラム実行例

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

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

arrayMap("decToHex(%val%)", rgb)
PRINT "$" + JOIN(rgb, "")

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

//////////////////////////////////////////////////
// 【引数】
//   color : Color値 
// 【戻値】
//   赤成分、緑成分、青成分を格納した配列 
//////////////////////////////////////////////////
FUNCTION colorToRGB(color)
	DIM array[2]
	array[0] = color AND $FF
	array[1] = (color AND $FF00) / $100
	array[2] = (color AND $FF0000) / $10000
	RESULT = SLICE(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   dec : 10進数 
// 【戻値】
//   16進数に変換した値 
//////////////////////////////////////////////////
FUNCTION decToHex(dec)
	RESULT = FORMAT(VAL(dec), 0, -1)
FEND

//////////////////////////////////////////////////
// 【引数】
//   color : Color値 
// 【戻値】
//   反転色 
//////////////////////////////////////////////////
FUNCTION invertedColor(color)
	DIM array = colorToRGB(color)
	arrayMap(255 + " - %val%", array)
	RESULT = RGBToColor(array[0], array[1], array[2])
FEND

//////////////////////////////////////////////////
// 【引数】
//   r : 赤成分 
//   g : 緑成分 
//   b : 青成分 
// 【戻値】
//   Color値 
//////////////////////////////////////////////////
FUNCTION RGBToColor(r, g, b)
	RESULT = r + g * 256 + b * 65536
FEND
    (1) (1) (4) (4) (5)
結果
$1B4827

素因数分解する

616を素因数分解し、その結果を出力します。

DIM num = 616
DIM arr = primeFactorization(num)
PRINT num + "=" + JOIN(arr, "×")		// 配列の中身を「×」で結合

//////////////////////////////////////////////////
// 【引数】
//   array : 要素を追加する配列(参照引数) 
//   str : 追加する要素 
// 【戻値】
//   処理後の配列の中の要素の数 
//////////////////////////////////////////////////
FUNCTION arrayPush(var arr[], str)
	DIM res = RESIZE(arr, UBound(arr) + 1)
	arr[res] = str
	RESULT = res + 1
FEND

//////////////////////////////////////////////////
// 【引数】
//   num : 素因数分解する数値 
// 【戻値】
//   素因数分解した数値を格納した配列 
//////////////////////////////////////////////////
FUNCTION primeFactorization(num)
	DIM arr[-1]
	// 偶数なら2で割り続ける
	WHILE num MOD 2 = 0
		arrayPush(arr, 2)
		num = num / 2
	WEND
	FOR n = 3 TO num
		WHILE num MOD n = 0
			arrayPush(arr, n)
			num = num / n
		WEND
	NEXT
	RESULT = SLICE(arr)
FEND

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND
    (2) (3)
結果
616=2×2×2×7×11

POSTデータを送信して指定したURLを開く

HASHTBL data
// 送信するデータを「data[名前] = 値」の形式で指定
data["mail"] = "info@example.com"
data["address"] = "北海道"

DIM arr[LENGTH(data) - 1]
FOR n = 0 TO LENGTH(data) - 1
	// 連想配列の中身を「名前=値」の形式に変換
	arr[n] = arr[n] + data[n, HASH_KEY] + "=" + ENCODE(ENCODE(data[n, HASH_VAL], CODE_UTF8), CODE_URL)
NEXT
// 配列の中身を「&」で結合
DIM PostData = JOIN(arr, "&")

// データをエンコード
PostData = ENCODE(PostData, CODE_BYTEARRAY)
// PostDataを渡すときは必ず指定
DIM Headers = "Content-Type: application/x-www-form-urlencoded"
DIM IE = CREATEOLEOBJ("InternetExplorer.Application")
IE.Visible = TRUE
IE.Navigate("http://example.com", , , PostData, Headers)
BusyWait(IE)
SLEEP(5.000)
IE.Quit

//////////////////////////////////////////////////
// 【引数】
//   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
    (6,7) (9,15) (12) (18) (22)

関連記事

CALCARRAY (スクリプト関数)
配列データを計算します。
GETALLWIN (スクリプト関数)
全ウィンドウのIDを取得します。
POPUPMENU (スクリプト関数)
ポップアップメニューを表示します。
SLICE (スクリプト関数)
配列の中を指定範囲の配列で返します。
SPLIT (スクリプト関数)
文字列を区切り、配列を作成します。
UBound (自作関数)
配列の最大インデックスを返します。
連想配列
連想配列とは、自動的に割り当てられる数字をキーとして持つかわりに、自由に任意の文字列を割り振ることができる配列のことです。添え字に番号の変わりに名前をつけることでわかりやすく管理することができます。
FOR-IN-NEXT
配列の要素分だけ処理を繰り返します。FOR文でも書き換えられます。
inArray (自作関数)
divisors (自作関数)
引数に指定した数値の約数をリストを配列で返します。
gnomeSort (自作関数)
ノームソートはソートアルゴリズムの一つです。挿入ソートに似ているが、要素の移動は挿入ではなくバブルソートのような一連の交換で行います。
QSORT (スクリプト関数)
配列の中身をソートします。
RESIZE (スクリプト関数)
配列のサイズを変更します。
SETCLEAR (スクリプト関数)
配列を指定された値で埋めます。
SHIFTARRAY (スクリプト関数)
配列データをシフトします。
bubbleSort (自作関数)
引数に指定した配列をバブルソートで並び替えます。
shakerSort (自作関数)
シェーカーソートは、ソートのアルゴリズムの一つです。バブルソートを改良したもの。双方向バブルソート、改良交換法とも言われます。バブルソートではスキャンを一方向にしか行わないのに対し、シェーカーソートでは交互に二方向に行います。
combSort (自作関数)
コムソートではソートの初期段階では離れた要素を比較交換します。そして徐々に2つの要素間の距離を縮めて、最後に直接隣接している要素どうしの比較交換を行います。
selectionSort (自作関数)
選択ソートは、ソートのアルゴリズムの一つ。配列された要素から、最大値やまたは最小値を探索し配列最後の要素と入れ替えを行うことでソートします。
heapSort (自作関数)
引数に指定された配列をヒープソートで並び替えます。
oddEvenSort (自作関数)
奇偶転置ソートは、ソートのアルゴリズムの一つで、バブルソートを改良したもの。バブルソートではスキャンを一方向に順次行うのに対し、奇偶転置ソートでは組ごとに行います。
shearSort (自作関数)
シェアソートはソートアルゴリズムの一つで、データを長方形に並べた上で各行・各列ごとにソートを行ないます。
arraySearch (自作関数)
配列の中から指定した要素が見つかった場合、その要素がある最初のインデックスを返します。
arrayReverse (自作関数)
引数に指定した配列を逆順にして返します。
insertionSort (自作関数)
挿入ソートは、ソートのアルゴリズムの一つ。整列してある配列に追加要素を適切な場所に挿入します。
shellSort (自作関数)
シェルソートは挿入ソートが改良された整列アルゴリズムです。リストにおいてあらかじめ離れている要素を交換しておき、最終的に挿入ソートを実行します。
mergeSort (自作関数)
マージソートは整列されていないリストを2つのリストに分割して、それぞれを整列させた後、それらをマージして整列済みのひとつのリストを作ります。
quickSort (自作関数)
問題を小さな部分問題に分割していく分割統治法を利用した手法で、データから適当に基準値を決めこれより大きいグループと小さいグループに分けるという手順を、分けた小さなグループに対しても再帰的に繰り返していきます。
bogoSort (自作関数)
要素をランダムに並べ替えることで偶発的な一致を試みる整列アルゴリズムです。