←
▼
▲
Sub DicKeyToArr( Dic as Dictionary, out_Array as array of string )
Dictionary のキーを配列に変換します。
(src)
←
▼
▲
Sub DicItemToArr( Dic as Dictionary, out_Array as array of variant )
Dictionary のアイテムを配列に変換します。
(src)
←
▼
▲
DicKeyToCSV
Function DicKeyToCSV( Dic as Dictionary ) as string
Dictionary のキーを CSV に変換します。
(src)
サンプル
Set dic = CreateObject( "Scripting.Dictionary" )
dic.Item( "Key1" ) = "Item1"
dic.Item( "Key2" ) = "Item2"
Assert DicKeyToCSV( dic ) = "Key1,Key2"
DicKeyToCSV
ファイル:
vbslib.vbs
テスト
→ T_Dic.vbs # [T_DicKeyToCSV]
Dic に要素が1つも無いときは、"" を返します。
←
▼
▲
Sub DicToArr( Dic as Dictionary, out_Arr as array of DicElem )
Dictionary を配列に変換します。 配列の要素は DicElem 型になります。
【引数】
Dic
out_Arr
Dictionary
(出力) DicElem 型の配列。
Dic の内容を Arr に変換すると、デバッガで内容を見ることができます。
(Visual Studio 2005)
(src)
Class DicElem
Public Key
Public Item
Public Property Get/Let Name '// Key と同じ
Public Sub Init( a_Key, a_Item )
End Class
サンプル:
DicToArr dic, arr '//[out] arr
関連
(src)
←
▼
▲
Sub DicElemArrayKeyToArr( a_DicElemArray as array of DicElem, out_Array as array of variant )
の配列から、DicElem::Key の配列を抽出します。
ソース
→ vbslib.vbs
←
▼
▲
Function IsSameDictionary( DicA as dictionary, DicB as dictionary, Option_ as integer )
as boolean
辞書のすべての要素が等しいかどうかを判定します。
各要素は = で判定します。
Option_ 引数
c は g_VBS_Lib の返り値です。
c.CompareOnlyExistB
DicB に存在する要素のみ比較します
c.StopIsNotSame
デバッグ用。 異なる要素が見つかったら、本関数の
中から Stop 命令を呼び出す
ソース
→ T_Dic.vbs
テスト
→ vbslib.vbs
T_IsSameDictionary
【引数】
DicA
DicB
DicB と比較する辞書
DicA と比較する辞書
Option_
オプション(下記)
辞書のすべての要素が等しいかどうか
返り値
←
▼
▲
Sub Dic_add( in_out_Dic as Dictionary, PlusDic as Dictionary )
辞書を加算します。
【引数】
in_out_Dic
PlusDic
(入出力) 加算される辞書
加算する内容が入っている辞書
PlusDic にあるキーがすでに in_out_Dic にあるときは、上書きします。
PlusDic のアイテムが Empty のキーは、in_out_Dic から削除されます。
そのキーが in_out_Dic にないときは、何もしませんし、エラーにもなりません。
値が Empty の変数を in_out_Dic に指定すると、内部で辞書を生成します。
→ T_Dic.vbs # T_DicAdd
テスト
関連
Set dic = Dict(Array( "Key1","Item1", "Key2","Item2" ))
Dic_add dic, Dict(Array( "Key2","ITEMS", "Key3","Item3" )) '//[out] dic
Assert dic.Count = 3
Assert dic.Item( "Key1" ) = "Item1"
Assert dic.Item( "Key2" ) = "ITEMS"
Assert dic.Item( "Key3" ) = "Item3"
サンプル
ソース
→ vbslib.vbs
←
▼
▲
Sub Dic_sub( out_Dic as Dictionary, WholeDic as Dictionary, BaseDic as Dictionary,
CompareFunc as function, CompareFuncParam as variant )
辞書を減算します。
【引数】
out_Dic
WholeDic
(出力) WholeDic から BaseDic を減算した結果の辞書
BaseDic に out_Dic を加算した結果と同一の内容が入った辞書
(src)
WholeDic - BaseDic = out_Dic の演算をします。
BaseDic に out_Dic を加算(Dic_add)した結果が、WholeDic になるような out_Dic を取得します。
out_Dic に、値が Empty の変数を指定すると、Dic_sub の内部で生成した辞書が取得できます。
同じキーのアイテムを CompareFunc した結果、等価でなければ、out_Dic にコピーされます。
辞書のアイテムがオブジェクトのときは、WholeDic のアイテムと同一のオブジェクトを指します。
BaseDic にあって WholeDic にないキーは、out_Dic にもできますが、アイテムは Empty と
なります。
out_Dic に Empty が入った変数を指定したら、内部で新しく辞書を生成します。
out_Dic に 辞書が入った変数を指定したときは、その辞書を空にしてから、その辞書に出力します。
BaseDic
Dic_add で加算する前と同一の内容が入った辞書
Dic_sub dic, _
Dict(Array( "Key1","Item1", "Key2","ITEMS", "Key3","Item3" )), _
Dict(Array( "Key1","Item1", "Key2","Item2", "Key4","Item4" )), _
Empty, Empty
'//[out] dic
'// dic = Dict(Array( "Key2","ITEMS", "Key3","Item3", "Key4",Empty ))
サンプル:
CompareFunc
CompareFuncParam
通常 Empty、CompareFunc の第3引数
、Empty =
通常 Empty、
→ T_Dic.vbs # T_DicAdd
テスト
サンプル:
Dic_sub dic, whole_dic, base_dic, Empty, Empty '//[out] dic
←
▼
▲
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
関連
Sub Dic_addInArrayItem( ref_Dictionary as dictionary of ArrayClass, _
in_Key as string, in_Item as variant )
配列をアイテムに持つ辞書に、配列の要素を追加します。
【引数】
ref_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
配列に追加するアイテム (オブジェクト または 非オブジェクト)
Key, Item
*
in_Item
*
データ構造
登録されていない辞書のキーを指定したときは、内部で ArrayClass のオブジェクトを新規作成して、
辞書のアイテムにします。
すでに登録されている辞書のキーを指定したときは、そのキーのアイテムである配列の末尾に
追加します。
内部の動作
Dic_addInArrayItem dic, "key", item
サンプル
要素でループする
For Each key In files.Keys
For Each item In files( key ).Items
:
Next
Next
同じ要素を重複して追加する可能性があるので注意してください。
←
▼
▲
Sub Dic_addExInArrayItem( ref_Dictionary as dictionary of ArrayClass, _
in_Key as string, in_Item as variant, _
in_CompareFunction as CompareFunction, in_ParameterOfCompareFunction as variant, _
in_Option as integer )
配列をアイテムに持つ辞書に、重複しないように、配列の要素を追加します。
【引数】
ref_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
配列に追加するアイテム、in_CompareFunction の第2引数
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
in_CompareFunction
in_ParameterOfCompareFunction
in_CompareFunction の第3引数
in_Option
c.ReplaceIfExist または c.IgnoreIfExist またはc.AddAlways
in_Option 引数の c は、g_VBS_Lib です。
c.ReplaceIfExist
c.IgnoreIfExist
比較関数が 0 を返す要素がすでにあるときは、置き換えます。
比較関数が 0 を返す要素がすでにあるときは、追加しません。
c.AddAlways
比較関数の結果に関わらず、追加します。
←
▼
▲
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
Dic_removeInArrayItem dic, "KeyA", "ItemA", GetRef( "StdCompare" ), Empty, True, False
Sub Dic_removeInArrayItem( arg_Dictionary as dictionary of ArrayClass, _
in_Key as string, in_Item as variant, _
in_CompareFunction as CompareFunction, in_ParameterOfCompareFunction as variant, _
in_IsErrorIfNotFound as boolean, in_IsMultiRemove as boolean )
配列をアイテムに持つ辞書から、配列の要素を除外します。
【引数】
arg_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
比較対象のアイテム、in_CompareFunction の第2引数
関連
サンプル
in_CompareFunction
in_ParameterOfCompareFunction
in_IsErrorIfNotFound
in_IsMultiRemove
in_CompareFunction の第3引数
1つも一致しなかったらエラーにするかどうか
複数の要素が一致したら、そのすべて除外するかどうか
in_IsErrorIfNotFound に True を指定すると、登録されていない辞書のキーを指定したときや、
比較対象のアイテムと一致する配列要素が1つのなかったときに、E_NotFoundSymbol エラー
になります。
参考
のデータ構造
辞書の中にある、指定されたキーに対応するアイテムを探し、
そのアイテムである配列の中のすべての要素に対して比較関数をコールバックし、
比較関数が 0を返したら、比較関数に渡した要素を配列から除外します。
配列の要素がすべて除外されたら、該当する辞書のキーやアイテムも除外します。
←
▼
▲
Function Dic_searchInArrayItem( ref_Dictionary as dictionary of ArrayClass, _
in_Key as string, in_Item as variant, _
in_CompareFunction as CompareFunction, in_ParameterOfCompareFunction as variant )
as array of integer
配列をアイテムに持つ辞書から、条件に合う配列番号を列挙します。
【引数】
ref_Dictionary
in_Key
配列をアイテムに持つ辞書
辞書のキー
in_Item
比較対象のアイテム、in_CompareFunction の第2引数
in_CompareFunction
in_ParameterOfCompareFunction
返り値
in_CompareFunction の第3引数
配列番号の配列
indexes = Dic_searchInArrayItem( dic, "KeyA", "ItemA", GetRef( "StdCompare" ), Empty )
サンプル
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
←
▼
▲
Function Dic_getCountInArrayItem( ref_Dictionary as dictionary of ArrayClass ) as integer
配列をアイテムに持つ辞書に入っているすべての要素の数を返します。
【引数】
ref_Dictionary
返り値
配列をアイテムに持つ辞書
要素の数
→ vbslib.vbs
ソース
→ T_Dic.vbs
テスト
T_DicArrayItem
←
▼
▲
Function GetDicItemAsArrayClass( Dic as dictionary, Key as string ) as ArrayClass
辞書のアイテムにある ArrayClass で参照します。 アイテムがなければ ArrayClass を作成します。
【引数】
Desc
Key
辞書
辞書のキー
返り値
辞書の要素である ArrayClass のオブジェクト
Dim dic, arr
Set dic = CreateObject( "Scripting.Dictionary" )
Set arr = GetDicItemAsArrayClass( dic, "key1" )
テスト
→ T_Dic.vbs # T_GetDicItem
サンプル
dic, "key1"
ソース
→ vbslib.vbs
指定したキーに対応するアイテムがないときは、新規作成した ArrayClass のオブジェクトを、
キーに対応するアイテムに追加します。
←
▼
▲
Function Dic_searchParent( Dictionay as dictionary, BasePath as string, Path as string ) as string
パスがキーに入っている辞書の中から、指定したパスの親フォルダーのパスを検索します。
【引数】
Dictionay
BasePath
検索対象の辞書
Dictionay 引数のキーがフル パスのときの基準(フル パス)、Empty 可
Path
検索キーとなるファイル、または、フォルダーのパス、または、Empty
サンプル
返り値
親フォルダーのパス、または、Empty = 見つからない
T_PathDictionary_SearchParent
→ vbslib.vbs
ソース
→ T_Wildcard.vbs
テスト
Set dic = CreateObject( "Scripting.Dictionary" )
dic( "123" ) = 0
dic( "123\456" ) = 0
Assert Dic_searchParent( dic, "C:\Folder", "123\456\a.txt" ) = "123\456"
Assert Dic_searchParent( dic, "C:\Folder", "123\4567\a.txt" ) = "123"
Assert IsEmpty( Dic_searchParent( dic, "C:\Folder", "123" ) )
サンプル
Function GetOrAddIfNot( Path )
If dic.Exists( Path ) Then
Set GetOrAddIfNot = dic( Path )
Else
Set parent_item = Dic_searchParent( dic, "C:\Folder", Path )
If IsEmpty( parent_item ) Then Error
Set sub_item = NewSubFromParent( parent_item, Path )
Set dic( Path ) = sub_item
Set GetOrAddIfNot = sub_item
End Sub
サブ フォルダーの Item を、親フォルダーの Item を参考に作成します
関連
の SearchParent
BasePath 引数は、Dictionay 引数のキーがフル パスのとき、かつ、Path が相対パスのときに必要です。
それ以外のときは、Empty を指定できます。
に近い処理をします。
←
▼
▲
Sub Dic_searchChildren( Dictionay as dictionary, BasePath as string,
Path as string, out_PathArray as array of string, Option_ as Empty )
パスがキーに入っている辞書の中から、指定したパスの子ノードのパスを検索します。
【引数】
Dictionay
BasePath
検索対象の辞書
Dictionay 引数のキーがフル パスのときの基準(フル パス)、Empty 可
Path
検索キーとなるファイル・フォルダーのパス、または、Empty
out_PathArray
(出力) 子のフォルダーまたはファイルのパスの配列
Option_
Empty を指定してください
サンプル
Set dic = CreateObject( "Scripting.Dictionary" )
dic( "123\456" ) = 0
dic( "123\456\File.txt" ) = 0
Dic_searchChildren dic, "C:\Folder", "123", an_array, Empty '//(out)an_array
Assert IsSameArray( an_array, Array( "123\456", "123\456\File.txt" ) )
Dic_searchChildren dic, "C:\Folder", "123\456", an_array, Empty '//(out)an_array
Assert IsSameArray( an_array, Array( "123\456\File.txt" ) )
Dic_searchChildren dic, "C:\Folder", "12", an_array, Empty '//(out)an_array
Assert IsSameArray( an_array, Array( ) )
BasePath 引数は、Dictionay 引数のキーがフル パスのとき、かつ、Path が相対パスのときに必要です。
それ以外のときは、Empty を指定できます。
T_PathDictionary_SearchChildren
→ vbslib.vbs
ソース
→ T_Wildcard.vbs
テスト
out_PathArray 引数の配列要素がフル パスか相対パスかは、Dictionay 引数のキーがフル パスか
相対パスかによります。
フォルダーとサブ フォルダーに入っているファイルを一覧することに近い処理をします。
←
▼
▲
ソース
→ vbslib.vbs
Sub QuickSortDicByKey( in_out_Dictionary as dictionary )
【引数】
in_out_Dictionary
ソートする辞書
辞書に入っているデータをクイック ソートします。 辞書のキーでソートします。
辞書の Item はオブジェクト(Set で代入するもの)を指定してください。
辞書の Keys の順番が変わります。
を使ってソートします。
関連
←
▼
▲
Sub QuickSortDicByKeyForNotObject( in_out_Dictionary as dictionary )
【引数】
in_out_Dictionary
ソートする辞書
辞書に入っているデータをクイック ソートします。 辞書のキーでソートします。
辞書の Keys の順番が変わります。
辞書の Item はオブジェクト以外(Set で代入しないもの)を指定してください。
ソース
→ vbslib.vbs
を使ってソートします。
テスト
←
▼
▲
Sub DicItemToNameOnlyClassItem( ref_Dictionary )
オブジェクトではない辞書のアイテムを、NameOnlyClass のオブジェクトに変換します。
【引数】
ref_Dictionary
アイテムを変換する辞書
ソートできる辞書にします。
NameOnlyClass の Delegate メンバーは Empty になります。
Set dic = CreateObject( "Scripting.Dictionary" )
DicItemToNameOnlyClassItem dic
サンプル
ソース
→ vbslib.vbs
関連
配列版
テスト
←
▼
▲
Sub NameOnlyClassItemToDicItem( ref_Dictionary )
NameOnlyClass のオブジェクトが入っている辞書を、Name プロパティの値の辞書に変換します。
【引数】
ref_Dictionary
アイテムを変換する辞書
ソートできる配列から戻します。
Set dic = CreateObject( "Scripting.Dictionary" )
NameOnlyClassItemToDicItem dic
サンプル
ソース
→ vbslib.vbs
関連
配列版
テスト
←
▼
▲
Sub QuickSort_fromDic( Dic as dictionary, out_Arr as array of object,
CompareFunc as function, Param as variant )
【引数】
Dic
ソートするデータが入った辞書。(辞書はソートされません)
辞書に入っているデータ(Dictionary::Item)をクイックソートします。 比較関数を指定します。
(出力) ソートした結果の配列。配列の要素はオブジェクト
out_Arr
CompareFunc
Param
compare_func の第3引数
(src)
サンプル
QuickSort_fromDic dic, arr, GetRef("StdCompare"), Empty '//[out]arr
関連
←
▼
▲
ソース
→ vbslib.vbs
Set dic = CreateObject( "Scripting.Dictionary" )
QuickSort_fromDicKey dic, sorted_items, Empty '//[out] sorted_items
For Each item In sorted_items
echo item.Key +" : "+ item.Item
Next
Sub QuickSort_fromDicKey( in_out_Dictionary as dictionary,
out_SortedKeysArray as array of string, in_Empty as Empty )
辞書に入っているデータをクイック ソートします。 辞書のキーでソートします。
【引数】
in_out_Dictionary
out_SortedKeysArray
ソートする前のキーが入った辞書
(出力) ソートした後のキーが入った配列。配列の要素は
in_Empty
Empty を指定してください
サンプル
ソートした結果は、out_SortedKeysArray 引数に出力されます。
関連
を使ってソートします。