(for Internet Explorer)
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 引数に出力されます。
関連
を使ってソートします。
Sub  ShakerSortDicByKey( Dic as Dictionary )
【引数】
Dic
ソートする辞書
辞書に入っているデータをシェーカーソートします。 辞書のキーでソートします。
テスト
→ T_ShakerSort.vbs
T_ShakerSortDicByKey
ソース
→ vbslib.vbs
辞書の Item はオブジェクト(Set で代入するもの)を指定してください。
Sub  ShakerSortDicByKeyCompare( Dic as Dictionary,
   CompareFunc as function, CompareFuncParam as variant )
【引数】
Dic
ソートする辞書
辞書に入っているデータをシェーカーソートします。 辞書のキーでソートします。
テスト
→ T_ShakerSort.vbs
T_ShakerSortDicByKeyCompare
ソース
→ vbslib.vbs
辞書の Item はオブジェクト(Set で代入するもの)を指定してください。
CompareFunc
CompareFuncParam
CompareFunc の第3引数
ShakerSortDicByKeyCompare  dic, GetRef( "NumStringCompare" ), Empty
サンプル