inArray

タグ:

配列の中に指定した要素があるかどうかを返します。

要素のインデックスを取得したい場合、arraySearch関数を使います。

構文
  1. Boolean = inArray( needle, haystack[], strict )
引数
needle
探す値
haystack
配列
strict
戻値
TRUE
配列中に指定した値が存在する
FALSE
配列中に指定した値が存在しない

プログラム

//////////////////////////////////////////////////
// 【引数】
//   needle : 探す値 
//   haystack : 配列 
//   strict 
// 【戻値】
//   TRUE : 配列中に指定した値が存在する、FALSE : 配列中に指定した値が存在しない 
//////////////////////////////////////////////////
FUNCTION inArray( needle, haystack[], strict = FALSE)
	DIM res = FALSE
	FOR item IN haystack
		IFB needle = item THEN
			res = TRUE
			BREAK
		ENDIF
	NEXT
	RESULT = res
FEND

プログラム実行例

画像ファイルの情報を取得

「ピクチャ\100ANDRO\20210314」にある画像ファイルの情報を出力。

CONST ssfMYPICTURES = 39

HASHTBL iColumn

DIM Shell = CREATEOLEOBJ("Shell.Application")
DIM Folder = Shell.NameSpace(ssfMYPICTURES)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
DIM path = FSO.BuildPath(Folder.Self.Path, "100ANDRO\20210314")
Folder = Shell.NameSpace(path)
FolderItems = Folder.Items

FOR n = 0 TO 350
	iColumn[Folder.GetDetailsOf(EMPTYPARAM, n)] = n
NEXT

DIM temp = uniqueFilename(FSO.BuildPath(path, "Info.csv"))
FSO.CreateTextFile(temp, FALSE, FALSE)

DIM FID = FOPEN(temp, F_READ OR F_WRITE)

DIM array[] = "ファイル名", "撮影日時", "幅", "高さ", "サイズ", "ビットの深さ", "パス", "焦点距離", "向き"

FOR i = 1 TO UBound(array)
	FPUT(FID, array[i], 1, i)
NEXT

DIM row = 2
DIM extensions[] = ".jpg", ".jpeg", ".png", ".bmp"

FOR FolderItem IN FolderItems
	FUKIDASI(row + "/" + FolderItems.Count)
	IF inArray(Folder.GetDetailsOf(FolderItem, iColumn["ファイル拡張子"]), extensions) = FALSE THEN CONTINUE
	FOR i = 1 TO UBound(array)
		FPUT(FID, Folder.GetDetailsOf(FolderItem, iColumn[array[i]]), row, i)
	NEXT
	row = row + 1
NEXT

FCLOSE(FID)

//////////////////////////////////////////////////
// 【引数】
//   needle : 探す値 
//   haystack : 配列 
//   strict 
// 【戻値】
//   TRUE : 配列中に指定した値が存在する、FALSE : 配列中に指定した値が存在しない 
//////////////////////////////////////////////////
FUNCTION inArray( needle, haystack[], strict = FALSE)
	DIM res = FALSE
	FOR item IN haystack
		IFB needle = item THEN
			res = TRUE
			BREAK
		ENDIF
	NEXT
	RESULT = res
FEND

//////////////////////////////////////////////////
// 【引数】
//   配列 : 上限値を求める配列 
// 【戻値】
//   配列の上限値 
//////////////////////////////////////////////////
FUNCTION UBound(array[])
	RESULT = RESIZE(array)
FEND

//////////////////////////////////////////////////
// 【引数】
//   path : ファイルのパス 
// 【戻値】
//   重複しないファイル名 
//////////////////////////////////////////////////
FUNCTION uniqueFilename(path)
	DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
	IFB FSO.FileExists(path) THEN
		DIM fol = FSO.GetParentFolderName(path)
		DIM filename = FSO.GetBaseName(path)
		DIM extension = FSO.GetExtensionName(path)
		DIM i = 2
		WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension))
			i = i + 1
		WEND
		RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension)
	ELSE
		RESULT = path
	ENDIF
FEND
  1. CREATEOLEOBJ
  2. Shell.NameSpace
  3. FSO.BuildPath
  4. Shell.Folder.Items
  5. uniqueFilename
  6. FSO.CreateTextFile
  7. FOPEN
  8. UBound
  9. FPUT
  10. FUKIDASI
  11. inArray
  12. Shell.Folder.GetDetailsOf
  13. FCLOSE

関連記事

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