(for Internet Explorer)
← ▼ ▲
↑
RemoveObjectsByNames
Sub RemoveObjectsByNames( in_out_Array, Names as variant )
オブジェクトが格納された配列から、Name プロパティがマッチするオブジェクトを除外します。
【引数】
in_out_Array
Names
Name プロパティがあるオブジェクトが格納された配列
Name プロパティと比較するもの
ソース
Names が文字列のとき
Name プロパティと単純に比較します。
Names が RegExp 型のとき
→ 正規表現 (VBScript.RegExp)
Name プロパティと正規表現で比較します。
Names が配列型のとき
Names がオブジェクトのとき
Name プロパティと Name プロパティを比較します。
配列の要素のそれぞれについて、１つでのマッチしたら除外します。
要素は、文字列、RegExp、Name プロパティを持つオブジェクトを混在できます。
テスト
→ T_Arr.vbs
T_RemoveObjectsByNames
→ vbslib.vbs
← ▼ ▲
ArrayToNameOnlyClassArray
→ NameOnlyClass
Function ArrayToNameOnlyClassArray( aArray as array of not object ) as array of NameOnlyClass
オブジェクトではない要素を持つ配列を、NameOnlyClass の配列に変換します。
【引数】
aArray
返り値
オブジェクトではない要素を持つ配列
NameOnlyClass の配列
→ QuickSort
→ ShakerSort
関連
ソートできる配列にします。
NameOnlyClass の Delegate メンバーは Empty になります。
arr = ArrayToNameOnlyClassArray( Array( "a", "b", "c" ) )
(src)
→ NameOnlyClassArrayToArray
テスト
→ T_ShakerSort.vbs
T_SortByPath
サンプル
逆の変換
→ DicItemToNameOnlyClassItem
辞書版
← ▼ ▲
NameOnlyClassArrayToArray
→ NameOnlyClass
Function NameOnlyClassArrayToArray( aArray as array of object ) as array of variant
Name プロパティを持つオブジェクトの配列を、Name プロパティの値の配列に変換します。
【引数】
aArray
返り値
Name プロパティを持つオブジェクトの配列
Name プロパティの値の配列
関連
ソートできる配列から戻します。
(src)
→ ArrayToNameOnlyClassArray
テスト
→ T_ShakerSort.vbs
T_SortByPath
逆の変換
→ NameOnlyClassItemToDicItem
辞書版
← ▼ ▲
その他
→ (CSV) ArrayFromCSV, ArrayFromCSV_Int
→ DicToArr
→ Dic_addFromArray
→ DicKeyToArr
→ DicItemToArr
→ 並べ替え、ソート
← ▼ ▲
辞書 （Dictionary）
→ Dictionary クラス （ハッシュ、Scripting.Dictionary）
参考
Set dic = CreateObject( "Scripting.Dictionary" )
→ Dic_addInArrayItem
配列の辞書
→ Dic_addNewObject
無ければ追加する辞書
辞書は、次のように生成します。
→ Dictionary クラス （ハッシュ、Scripting.Dictionary）
辞書
← ▼ ▲
Dict
Function Dict( Elems as array ) as Dictionary
辞書を生成します。
Elems の奇数番目の要素は、キー、偶数番目の要素は、アイテムになります。
キーは文字列のみですが、アイテムはオブジェクトなども指定できます。
サンプル
Set dic = Dict(Array( "Key1","Item1", "Key2","Item2" ))
Set dic = CreateObject( "Scripting.Dictionary" )
dic.Item( "Key1" ) = "Item1"
dic.Item( "Key2" ) = "Item2"
上記は下記と同じ処理内容です
→ T_Dic.vbs # T_Dict
テスト
関連
→ JSON (JavaScript Object Notation)
Set obj = Dict(Array( "Attr1", 123, "Attr2", "ABC" ))
echo obj("Attr1") & obj("Attr2")
サンプル
ソース
→ vbs_inc_sub.vbs
生成した辞書のキーは大文字小文字を区別しません。
→ Dic_addFromArray
← ▼ ▲
DictionaryClass
キーが存在しないときに参照しても、自動的にキーを追加しない辞書。
→ T_Dic.vbs
テスト
T_DictionaryClass
→ vbslib.vbs
ソース
→ Dictionary クラス (VBScript)
関連
文字列のスペルミス対策
キーが存在しないときに自動的にキーを追加しないため、文字列のスペルミスを防ぐことができます。
ただし、キーとアイテムが異なることが一般的である辞書型では、アイテムを調べなければ
文字列を知ることができないため、開発効率が落ちます。
そこで、キーの先頭が ">" から、アイテムと同じであるようなルールにするとよいでしょう。
Set g = new DictionaryClass
g(">Spell") = "Spell"
→ LazyDictionaryClass
← ▼ ▲
DicTable
Function DicTable( DataArray as array ) as array of Dictionary
テーブルのように使う、辞書の配列を生成します。
関連
→ Dict
(src)
サンプル
For Each t In DicTable( Array( _
"Item", "Price", "Number", Empty, _
"Book", 2000, 2, _
"Pen", 100, 12, _
"Eraser", 60, 10 ) )
echo t("Item") &" : "& t("Price") * t("Number")
Next
１行目は、辞書のキー（属性名）を並べ、行末は Empty にします。
２行目以降は、辞書のアイテム（値）を並べます。
値には、配列やオブジェクトも指定できます。
上記を実行した結果の出力は、下記のようになります。
Book : 4000
Pen : 1200
Eraser : 600
→ JSON (JavaScript Object Notation)
辞書の内容を見るには、echo o で出力するか、?GetEchoStr( t )
をイミディエイトウィンドウで実行します。
?GetEchoStr( t )
"Item=Book
Price=2000
Number=2"
→ テストケースの組み合わせ
→ T_Dic.vbs
テスト
→ JoinDicTable
T_DicTable
デバッグのために一時的に途中から始めるときは、スキップするデータを For の上に移動し、
次のように Array を使ってダミーの配列を作成すれば無効化できます。
Array _
"Book", 2000, 2, _
"Pen", 100, 12, _
0 : Skipped
For Each t In DicTable( Array( _
"Item", "Price", "Number", Empty, _
"Eraser", 60, 10 ) )
echo t("Item") &" : "& t("Price") * t("Number")
Next
Array _
0 :
Skipped
Dictionary
Key, Item
array
*
in_Item
*
データ構造
→ Dic_addInArrayItem
← ▼ ▲
JoinDicTable
Function JoinDicTable( DicTable1 as array of Dictionary, KeyField as string,
DicTable2 as array of Dictionary ) as array of Dictionary
２つのテーブル（辞書の配列）を、指定のフィールドが一致する行で、結合します。
サンプル
table1 = DicTable( Array( _
"Item", "Price", Empty, _
"Book", 2000, _
"Pen", 100, _
"Eraser", 60 ) )
For Each t In JoinDicTable( table1, "Item", Array( _
"Item", "Number", Empty, _
"Book", 2, _
"Pen", 12, _
"Eraser", 10 ) )
echo t("Item") &" : "& t("Price") * t("Number")
Next
【引数】
DicTable1
KeyField
テーブル（辞書の配列）
比較するフィールド名（辞書のキー）
DicTable2
テーブル（辞書の配列）
結合後のテーブル（辞書の配列）
返り値
(src)
For Each t In DicTable( Array( _
"Item", "Price", "Number", Empty, _
"Book", 2000, 2, _
"Pen", 100, 12, _
"Eraser", 60, 10 ) )
echo t("Item") &" : "& t("Price") * t("Number")
Next
上記の結合をした結果は、下記と同じです。
Item
Item
Item
JoinDicTable
関連
→ DicTable
→ SQL の JOIN の詳細
KeyField を持ち、KeyField が Empty ではない行について、SQL の FULL OUTER JOIN
演算を行います。
DicTable
テスト
→ T_Dic.vbs # T_DicTable
← ▼ ▲
GetDicItem
Sub GetDicItem( in_Dictionary as dictionary, in_Key as string, out_Item as variant )
GetDicItem dic, "key1", item '// Set "item"
If IsEmpty( item ) Then _
Set item = new ItemClass : item.Name = "key1"
登録されていない Key を指定したときは、out_Item = Empty になります。
このとき、値が Empty の要素を in_Dictionary 引数に指定した辞書に追加しません。
キーが登録されていることと、キーのアイテムが Empty ことの区別をするときは、Dictionary::Exists
を使ってください。
キーに対応するアイテムを取得します。
→ Dictionary::Item
【引数】
Dic
Key
辞書
辞書のキー
out_Item
（出力）辞書のアイテム （オブジェクト または 非オブジェクト）
テスト
→ T_Dic.vbs
サンプル
辞書からアイテムを取得するときの
LetSet
です。
T_GetDicItem
ソース
→ vbslib.vbs
関連
→ GetDicItemOrError
アイテムがオブジェクトでも非オブジェクトでもエラーが発生しないで、アイテムを取得できます。
→ LetSetWithBracket
→ LetSetWithBracket
下記のどちらかのコードに相当します。
out_Item = in_Dictionary( in_Key )
Set out_Item = in_Dictionary( in_Key )
→ GetDicItemByIndex
→ GetFirst
← ▼ ▲
GetDicItemOrError
Sub GetDicItemOrError( in_Dictionary as Dictionary, in_Key as string, out_Item as variant,
in_DictionaryName as string )
指定したキーが登録されていなければエラーになる
です。
GetDicItem
エラーメッセージは、下記のようになります。
【引数】
in_Dictionary
in_Key
辞書
辞書のキー
out_Item
（出力）辞書のアイテム （オブジェクト または 非オブジェクト）
テスト
→ T_Dic.vbs
T_GetDicItem
ソース
→ vbslib.vbs
関連
→ GetDicItem
in_DictionaryName
辞書を特定するためにエラーメッセージに表示する辞書の名前
<ERROR msg="見つかりません" name="Last" in="検索結果"/>
GetDicItem dic, "Last", item, "検索結果" '// Set "item"
サンプル
← ▼ ▲
DicItem
Function DicItem( Dic as Dictionary, Key as string ) as variant
Dictionary::Item
登録されていないときも、新規に登録しない、
です。
dic.Item("key1")
DicItem( dic, "key1" )
Dictionary::Item では
DicItem では
登録されていないときは、Empty を返します。
(src)
テスト
→ T_Dic.vbs # T_GetDicItem
← ▼ ▲
GetDicItemByIndex
Sub GetDicItemByIndex( in_Dictionary as dictionary, in_IndexNum as string, out_Item as variant )
番号で辞書のアイテムを参照します。
番号が大きすぎるか小さすぎるときは、out_Item = Empty になります。
【引数】
in_Dictionary
in_IndexNum
辞書
キーの番号。 0 以上、キーの数未満
out_Item
（出力）辞書のアイテム
in_IndexNum 引数に指定する値は、in_Dictionary.Keys で取得できるキーの集合の順番に対応します。
GetDicItemByIndex dic, 0, item '// Set "item"
サンプル
→ vbslib.vbs
ソース
T_GetDicItem
テスト
→ T_Dic.vbs
→ GetFirst
関連
← ▼ ▲
DicItemOfItem
Function DicItemOfItem( Dic as Dictionary, Key as string ) as variant
辞書の Item が $ か % で囲んだ変数なら、それを Key とした Item を返します。
Set dic = CreateObject( "Scripting.Dictionary" )
dic.Item( "Key1" ) = "$Key3"
dic.Item( "Key2" ) = "%Key3%"
dic.Item( "Key3" ) = "Item3"
Assert DicItemOfItem( dic, "Key1" ) = "Item3"
Assert DicItemOfItem( dic, "Key2" ) = "Item3"
Assert DicItemOfItem( dic, "Key3" ) = "Item3"
サンプル
辞書の Item が % か で囲んだ変数ではないなら、辞書の Item をそのまま返します。
(src)
→ T_Dic.vbs # T_DicItemOfItem
テスト
→ LazyDictionaryClass
関連
← ▼ ▲
Dic_addElem
Sub Dic_addElem( ref_Dictionary as dictionary, in_Key as string, in_Item as variant )
辞書に要素（キーと値）を追加します。
【引数】
ref_Dictionary
in_Key
（入出力） 編集する辞書
辞書のキー
in_Item
辞書に追加する値 （オブジェクト または 非オブジェクト）
in_Item がオブジェクトかどうかで、Set を記述するかどうかを区別する必要がありません。
in_Item が Empty のときは、ref_Dictionary からキーを削除します。
すでに指定したキーが登録されてあったときは、値を変更します。
関連
→ Dic_add
→ LetSetWithBracket
Dic_addElem dic, "key1", item
サンプル
→ T_Dic.vbs # T_DicAdd
テスト
ソース
→ vbslib.vbs
← ▼ ▲
Dic_addElemOrError
Sub Dic_addElemOrError( ref_Dictionary as dictionary, in_Key as string, in_Item as variant,
in_DictionaryName as string )
【引数】
ref_Dictionary
in_Key
（入出力） 編集する辞書
辞書のキー
in_Item
辞書に追加する値 （オブジェクト または 非オブジェクト）
指定したキーがすでに登録されていたらエラーになる
です。
Dic_addElem
in_DictionaryName
辞書を特定するためにエラーメッセージに表示する辞書の名前
エラーメッセージは、下記のようになります。
<ERROR msg="見つかりません" name="Last" in="検索結果"/>
Dic_addElemOrError dic, "key1", item, "検索結果" '// Set "item"
サンプル
関連
→ T_Dic.vbs # T_DicAdd
テスト
ソース
→ Dic_addElem
→ Dic_addUniqueKeyItem
→ vbslib.vbs
← ▼ ▲
Dic_addUniqueKeyItem
Sub Dic_addUniqueKeyItem( ref_Dictionary as Dictionary, in_Key as string, in_Item as variant )
辞書の要素を追加します。 すでに同じキーがあるときは、エラーになります。
【引数】
in_out_Dic
Key
（入出力） 編集する辞書
キー
Item
辞書に追加する アイテム
ref_Dictionary.Add in_Key, in_Item とほぼ同じですが、違いは下記のとおりです。
・in_Item が Empty のときは、ref_Dictionary からキーを削除します。
・すでに同じキーがあるときのエラーメッセージに、そのキーが表示されます。
→ T_Dic.vbs # T_DicAdd
テスト
関連
→ Dic_add
ソース
→ vbslib.vbs
Dic_addElemOrError
注意
の使用を推奨します。
← ▼ ▲
Dic_addNewObject
Function Dic_addNewObject( Dic as Dictionary,
ClassName as string, ObjectName as string, IsDuplicate as boolean ) as ClassName
指定した名前がキーになければ、その名前を付けたオブジェクトを生成し、辞書に追加します。
【引数】
Dic
ClassName
辞書。 キーが ObjectName の要素が追加される
クラス名
(src)
ObjectName
オブジェクトの名前、辞書のキーになります。
返り値
Name プロパティが ObjectName のオブジェクト
Set objs = CreateObject( "Scripting.Dictionary" )
Set obj = Dic_addNewObject( objs, "ClassA", "ObjectA", True )
Class ClassA
Public Name
End Class
すでに同じ名前のオブジェクトが辞書にあるとき、かつ、IsDuplicate = True なら追加しないで、
辞書に入っていたものを返します。 IsDuplicate = False なら E_AlreadyExist エラーになります。
辞書に無いときは、オブジェクトを生成します。
IsDuplicate
False = すでに辞書にあるときはエラーにする
→ T_Dic.vbs [T_DicAddObj]
テスト
→ AddNewObject (ArrayClass)
関連
ClassName に指定したクラスに、Name プロパティ、またはメンバー変数が必要です。
new_X
内部で
を使っているので、new_ClassA 関数の定義が必要です。
g_Vers("CutPropertyM") = False
Class ClassA
Public m_Name
End Class
g_Vers("CutPropertyM") = False にすると、Name の代わりに m_Name を使います。
生成したオブジェクトの Name プロパティに、ObjectName 引数の値が設定されます。
サンプル
← ▼ ▲
Dic_addFromArray
Function Dic_addFromArray( in_out_Dic as Dictionary, Keys as array of string, Items as variant )
配列を使って、辞書に追加します。
【引数】
in_out_Dic
Keys
（入出力） 加算される辞書、 Empty 可能
キーとなる文字列が入っている配列
Items
キーに対応する値、または、その配列
サンプル
Set dic = CreateObject( "Scripting.Dictionary" )
Dic_addFromArray dic, Array( "key1", "key2" ), True
上記は下記と同じ内容です。
Set dic = CreateObject( "Scripting.Dictionary" )
dic.Item( "key1" ) = True
dic.Item( "key2" ) = True
dic.Item( "key1" ) = 1
dic.Item( "key2" ) = 2
上記は下記と同じ内容です。
Dic_addFromArray dic, Array( "key1", "key2" ), Array( 1, 2 )
サンプル
→ T_Dic.vbs # [T_DicArray]
テスト
返り値
in_out_Dic と同じ
Set dic = Dic_addFromArray( Empty, Array( "key1", "key2" ), True )
サンプル
in_out_Dic 引数に Empty を指定した場合、新規に作成した辞書を返します。
ソース
→ vbs_inc_sub.vbs
← ▼ ▲
Dic_addPaths
Sub Dic_addPaths( in_out_Dic as Dictionary, BasePath as string, StepPaths as array of string,
Item as variant )
複数の相対パスをそれぞれのキーとして、辞書の要素を設定します。
【引数】
in_out_Dic
BasePath
（入出力） 編集する辞書、または、
相対パスの基準パス
StepPaths
キーとする相対パスの配列
辞書に追加する アイテム
Item
サンプル
Set files = CreateObject( "Scripting.Dictionary" )
Dic_addPaths files, "C:\Folder", Array( "a.txt", "b.txt" ), 12
PathDictionaryClass
上記のコードは、下記のコードと同じ処理をします。
Set files = CreateObject( "Scripting.Dictionary" )
files( "C:\Folder\a.txt" ) = 12
files( "C:\Folder\b.txt" ) = 12
→ T_Dic.vbs # T_DicAdd
テスト
ソース
→ vbslib.vbs
←
↓