(for Internet Explorer)
← ▼ ▲
↑
AddProject (CrossFindClass)
Function CrossFindClass::AddProject( in_ProjectName as string ) as CrossFind_ProjectClass
CrossFindClass のプロジェクトを追加します。
【引数】
in_ProjectName
プロジェクト名
返り値
追加したプロジェクト
<< CrossFindClass
→ CrossFind_ProjectClass
ソース
→ ToolsLib.vbs
← ▼ ▲
OutElements (CrossFindClass)
<< CrossFindClass
Property CrossFindClass::OutElements() as dictionary of CrossFind_OutElementClass
Key=ElementName
CrossFindClass の解析結果。
キーは、
AddModule (CrossFind_ProjectClass)
で追加したモジュール名。
アイテムは、
→ CrossFind_OutElementClass
ソース
→ ToolsLib.vbs
← ▼ ▲
CrossFind_ProjectClass
<< CrossFindClass
→ AddModule
CrossFindClass のプロジェクト。
ソース
→ ToolsLib.vbs
.Name
string
要素の名前
ArrayClass of
CrossFind_ModuleClass
.Modules
モジュールの配列
← ▼ ▲
AddModule (CrossFind_ProjectClass)
Sub CrossFindClass::AddModule( in_ModuleName as string, in_Elements as array of string )
CrossFindClass のプロジェクトにモジュールを追加します。
【引数】
in_ModuleName
モジュール名
in_Elements
モジュールを構成する要素の名前の配列
ソース
→ ToolsLib.vbs
← ▼ ▲
CrossFind_OutElementClass
<< CrossFindClass
CrossFindClass の解析結果。
.Name
.OutModuleTypes
string
CrossFind_OutModuleTypeClass
OutElements (CrossFindClass)
で取得します。
要素の名前
→ CrossFind_OutModuleTypeClass
ソース
→ ToolsLib.vbs
← ▼ ▲
CrossFind_OutModuleTypeClass
CrossFindClass の解析結果。
.Names
.Elements
ArrayClass of string
ArrayClass of string
で取得します。
同じ構成要素を持つモジュールの名前の配列
(CrossFind_OutElementClass)
OutModuleTypes
モジュールを構成する要素の名前の配列
ソース
→ ToolsLib.vbs
← ▼ ▲
アルゴリズム メモ (CrossFindClass)
b1 => { b1, b2 }
a1 => { a1, a2 }, { a1, b1 }
b1 => { b1, b2 }, { a1, b1 }
{ a1, b1 }
候補を絞っていく
候補がなくなったら、Module を追加する(A1.xml)か、
Element を追加する(A3.xml)か、どっち？
{ a1, b1 } をすべて（a1, b1）に追加する
a1 => { a1, a2 }
a2 => { a1, a2 }
a3 =>
{ a1, a2, a3 }
{ a1, a2, a3 }
{ a1, a2, a3 }
a3 に 全ての要素 { a1, a2, a3 } を追加
a3 を除いた { a1, a2 } を変更する
{ a1, b1 }
a1 => { a1, a2 }
{ a1, b1 }
（すべての）新規 (a3) を除いたモジュールがあれば、
要素すべて（a1 と b1）が既存なので
（既存の異なる２つのモジュールをクロスするので）
すべての要素を含むモジュールを見つける
=> { a1, a2 }, { a1, b1 }
=> { a1, b1 }
a3 を除いたのが { a1, b1 } でないときは、すべて追加する
a1 => { a1, a2 }
a2 => { a1, a2 }
a3 =>
新規 (a3) を除いたのが一部のときは、
（{ a1, a3 } については、）
Module を追加する
{ a1, a3 }
{ a1, a3 }
<< CrossFindClass
← ▼ ▲
並べ替え、ソート
← ▼ ▲
QuickSort
Sub QuickSort( Arr as object array, iLeft as integer, iRight as integer,
CompareFunc as function, CompareFuncParam as variant )
【引数】
Arr
iLeft
ソートする配列。(*1)
ソートする範囲。配列番号の最小値
配列をクイックソートします。安定ソートではありません。
ソートする範囲。配列番号の最大値
iRight
CompareFunc
比較関数
CompareFuncParam
CompareFunc の第3引数
Option Explicit
Class ClassA : Public id : End Class
Sub Main( Opt, AppKey )
ReDim arr(4)
Set arr(0) = new ClassA : arr(0).id = 6
Set arr(1) = new ClassA : arr(1).id = 3
Set arr(2) = new ClassA : arr(2).id = 4
Set arr(3) = new ClassA : arr(3).id = 4
Set arr(4) = new ClassA : arr(4).id = 1
QuickSort arr, 0, UBound( arr ), GetRef("CmpFunc1"), Empty
echo arr(0).id &","& arr(1).id &","& arr(2).id &","& _
arr(3).id &","& arr(4).id
End Sub
Function CmpFunc1( left, right, param )
CmpFunc1 = left.id - right.id '// 降順なら right.id - left.id
End Function
サンプル
→ クイックソート
配列の要素はオブジェクトであること。
参考
テスト
Arr 引数は、Visual Basic 標準の配列でも、ArrayClass でも構いませんが、
ArrayClass::Items は指定できません。（ソートされません。）
(*1)
→ ArrayToNameOnlyClassArray
→ T_QSort.vbs
関連
→ QuickSort_fromDic
ソース
→ vbslib.vbs
出力
1,3,4,4,6
→ QuickSortDicByKey
← ▼ ▲
ShakerSort
Sub ShakerSort( Arr as array of Object, iLeft as integer, iRight as integer,
CompareFunc as function, CompareFuncParam as variant )
【引数】
Arr
iLeft
ソートする配列。(*1)
ソートする範囲。配列番号の最小値。 通常 0
配列をシェーカーソートします。安定ソートです。
ソートする範囲。配列番号の最大値。 通常 UBound(Arr)
iRight
CompareFunc
比較関数
CompareFuncParam
CompareFunc の第3引数
Class ClassA : Public id : End Class
Redim arr(4)
Set arr(0) = new ClassA : arr(0).id = 6
Set arr(1) = new ClassA : arr(1).id = 3
Set arr(2) = new ClassA : arr(2).id = 4
Set arr(3) = new ClassA : arr(3).id = 4
Set arr(4) = new ClassA : arr(4).id = 1
ShakerSort arr, 0, UBound( arr ), GetRef("CmpFunc1"), Empty
WScript.Echo arr(0).id &","& arr(1).id &","& arr(2).id &","& _
arr(3).id &","& arr(4).id
Function CmpFunc1( Left, Right, Param )
CmpFunc1 = Left.id - Right.id '// 降順なら Right.id - Left.id
End Function
サンプル
(src)
→ シェーカーソート (ShakerSort)
Dim line
ReDim lines(-1)
Set f = OpenForRead( target_result_txt )
Do Until f.AtEndOfStream
Set line = new String1
line.s = f.ReadLine()
ReDim Preserve lines( UBound( lines ) + 1 )
Set lines( UBound( lines ) ) = line
Loop
f = Empty
ShakerSort lines, 0, UBound( lines ), GetRef("StrCmpFunc"), 1
Function StrCmpFunc( Left, Right, Param )
StrCmpFunc = StrComp( Left.s, Right.s, Param )
End Function
Class String1
Public s
End Class
文字列を昇順にソートするサンプル
配列の要素はオブジェクトであること。
テスト
参考
Arr 引数は、Visual Basic 標準の配列でも、ArrayClass でも構いませんが、
ArrayClass::Items は指定できません。（ソートされません。）
(*1)
→ ArrayToNameOnlyClassArray
→ T_ShakerSort.vbs
関連
→ ShakerSort_fromDic
→ ShakerSort_fromDicKey
→ ShakerSortDicByKey
→ ShakerSortDicByKeyCompare
← ▼ ▲
CompareFunction 型、比較関数型
Function CompareFunction( Left as variant, Right as variant, Parameter as variant ) as integer
２つのパラメーターを比較する関数の型。 関数名は、CompareFunction とは限りません。
【引数】
Left
Right
１つ目の比較対象
２つ目の比較対象
Parameter
比較に使う補助パラメーター
返り値
０：等しい、正の数：Left が大きい、負の数：Rightが大きい （昇順：小→大のとき）
StrComp
も、この関数型ですが、GetRef("StrComp") はエラーになります。
ShakerSort
Left、Right は、
などの関数に指定するコレクションの要素です。
Param には、ShakerSort などの関数にある引数がそのまま渡ります。
昇順：小→大にするときは、Left - Right の値を返してください。
降順にするときは、返り値の正と負を変えてください。
→ StdCompare
関連
→ NameCompare
→ LengthCompare
→ LengthNameCompare
→ StrCompOption
Function SampleStaticClass_comparePriority( in_Left, in_Right, in_Parameter )
SampleStaticClass_comparePriority = in_Left.Priority - in_Right.Priority
End Function
サンプル
→ CopyFunction 型、コピー関数型
← ▼ ▲
StdCompare
Function StdCompare( Left as variant, Right as variant, Param as variant ) as integer
２つのパラメーターを標準的な方法で比較します。 (StdCompare = Standard Compare)
Left
Right
返り値
比較関数型
です。
数値
数値
-1, 0, 1 のどれか。（＝や＞と同じ）
文字列
文字列
StrComp と同じ （＝や＞と同じ）。Param 引数も同じ
オブジェクト
オブジェクト
is 演算子
の結果が True なら 0、 False なら -1
Empty
Empty
0
Empty 以外
Empty
1 （昇順でソートすると、Emptyが最後になる）
Empty
Empty 以外
-1
日付
日付
古い方が小さい値となる返り値 （＝や＞と同じ）
任意の型
Left と異なる型
-1 （エラーにはならない）
テスト
→ T_QSort.vbs # [T_CompareFunc]
Param 引数は、Left と Right が文字列のときだけ有効です。
→ vbslib.vbs
ソース
← ▼ ▲
NameCompare
Function NameCompare( Left as variant, Right as variant, Param as variant ) as integer
２つのパラメーターを Name プロパティで比較します。
Left
Right
返り値
比較関数型
です。
オブジェクト
オブジェクト
Name プロパティを StrComp に渡した結果
オブジェクト以外
オブジェクト以外
0
オブジェクト以外
オブジェクト
-1 （昇順でソートすると、オブジェクト以外が最後になる）
オブジェクト
オブジェクト以外
1
テスト
→ T_QSort.vbs # [T_CompareFunc]
Param 引数は、StrComp 関数と同じです。
→ vbslib.vbs
ソース
← ▼ ▲
NumStringCompare
Function NumStringCompare( Left as variant, Right as variant, Param as variant ) as integer
文字列の中の数字を複数桁の正の整数値として比較します。
比較関数型
です。
Left
Right
返り値
"A10"
"A2"
正の数値（Left > Right）、数値10と2 の比較
"A"
"a"
負の数値（Left < Right）
正の数値（Left > Right）、大文字小文字を区別しない
"a"
"B"
"A10"
"A10.2"
負の数値（Left < Right）
"A10.2"
"A10.10"
正の数値（Left > Right）、小数ではなく整数.整数とする
負の数値（Left < Right）
"A2"
"A1"
"A-2"
"A-1"
負の数値（Left < Right）、マイナスとは見なさない
関連
→ shlwapi.dll の StrCmpLogicalW
テスト
→ T_QSort.vbs
→ NumStringNameCompare
T_NumStringCompare
Param 引数には、Empty または
c.CaseSensitive
を指定してください。
ファイル名でソート
したときと同じになります。 ただし、フォルダーの区切り記号 \ や / を含む文字列
を比較するときは、
PathCompare
を使ってください。
→ vbslib.vbs
ソース
10.10 は小数ではなく、バージョン番号のように 10 の 10 であるとします。
← ▼ ▲
NumStringNameCompare
Function NumStringNameCompare( Left as variant, Right as variant, Param as variant ) as integer
Name プロパティの文字列の中の数字を複数桁の正の整数値として比較します。
比較関数型
です。
→ NumStringCompare
参考
(src)
テスト
→ T_QSort.vbs
T_NumStringNameCompare
比較する処理の詳細
Param 引数には、Empty または
c.CaseSensitive
を指定してください。
→ vbslib.vbs
ソース
← ▼ ▲
LengthCompare
Function LengthCompare( Left as variant, Right as variant, Param as variant ) as integer
２つのパラメーターの長さを比較します。
文字列型のときは、文字列の長さを比較します。
Param がマイナスなら、返り値の正と負が入れ替わります。
比較関数型
です。
(src)
→ vbslib.vbs
ソース
← ▼ ▲
LengthNameCompare
Function LengthNameCompare( Left as variant, Right as variant, Param as variant ) as integer
２つのパラメーターの Name プロパティを LengthCompare で比較します。
比較関数型
です。
(src)
Param = -1 にすると、逆順になります。
→ vbslib.vbs
ソース
← ▼ ▲
PathCompare
Function PathCompare( Left as string, Right as string, Param as variant ) as integer
２つの文字列をパスとして比較します。
比較関数型
です。
テスト
→ T_ShakerSort.vbs
T_SortByPath
参考
→ PathNameCompare
関連
→ PathNameCompare
パスとして比較する処理の詳細
→ vbslib.vbs
ソース
← ▼ ▲
PathNameCompare
Function PathNameCompare( Left as variant, Right as variant, Param as variant ) as integer
２つのオブジェクトの Name プロパティをパスとして比較します。
比較関数型
です。
テスト
→ T_ShakerSort.vbs
T_SortByPath
サンプル
arr = ArrayToNameOnlyClassArray( Array( "F", "EE\!", "EE\*", "EE", "E!E", "E\F", "E" ) )
ShakerSort arr, 0, UBound( arr ), GetRef("PathNameCompare"), Empty
arr = NameOnlyClassArrayToArray( arr )
Assert IsSameArray( arr, Array( "E", "E\F", "E!E", "EE", "EE\*", "EE\!", "F" ) )
フォルダーの中にあるフォルダーやファイルは、連続します。
たとえば、通常の文字コードでソートしたら "A!B", "A\!", "A\*", "A\C" の順になりますが、
PathNameCompare では、"A\*", "A\!", "A\C", "A!B" の順になります。
フォルダー区切り記号（\,/）、ワイルドカード（*）、ピリオド（.）を、文字コードが小さい文字（タブ）
として処理します。
→ vbslib.vbs
ソース
Param を負の値とすると、大小比較の結果が逆になります。
そうでないときは、Param = Empty または Param を正の値にしてください。
関連
→ PathCompare
→ ExpandWildcard_Sort 変数
→ NumStringCompare
参考
ファイル名でソート
したときのように、数字は整数として比較します。
参考
→ Ascii コード
→ StrCmpLogicalW - Win32API
← ▼ ▲
ParentPathCompare
Function ParentPathCompare( Left as string, Right as string, Param as variant ) as integer
パスをソートした状態から、親フォルダーを後にするような比較を行います。
比較関数型
です。
通常、Param = -1 （Param <= 0） にして、親フォルダーが後になるようにします。
Param < 0 のときは、親フォルダーが前になるようにします。
親子関係以外の順序は変更しません。
テスト
→ T_ShakerSort.vbs
T_SortByParentPath
→ vbslib.vbs
ソース
サンプル
"a", "a\1", "aa", "b", "b\1", "b\1\2"
"a\1", "a", "aa", "b\1\2", "b\1", "b"
ParentPathCompare を使ってソートしたときの例：
ソート前：
ソート後：
← ▼ ▲
NoCompareFunction
Function NoCompareFunction( Left as variant, Right as variant, Param as variant ) as integer
Param 引数の内容をそのまま返します。
比較関数型
です。
→ vbslib.vbs
ソース
← ▼ ▲
IsReverseSortOption
Function IsReverseSortOption( in_Option as variant ) as boolean
逆順でソートするオプションが指定されているかどうかを返します。
ソース
in_Option 引数の値
返り値
Empty
False
False
c.CaseSensitive
-1
True
0
+1
False
False
テスト
→ T_ShakerSort.vbs
→ vbslib.vbs
← ▼ ▲
関連
→ QuickSort_fromDic
→ ShakerSort_fromDic
→ ShakerSort_fromDicKey
→ ShakerSortDicByKey
→ PArray_doShakerSort (clib)
→ XmlSort
→ SearchInSimpleArray
→ QuickSortDicByKey
← ▼ ▲
文字列
関連
→ ファイル名・パス
← ▼ ▲
CInt2
Function CInt2( v as string ) as integer
CInt でエラーが発生する値を v に指定したときは、0 を返します。
文字列を数値に変換します。
(src)
VBScript では、CInt は、符号付き16ビット整数ですが、CInt2 は
CLng に相当する 符号付き32ビット整数に対応しています。
関連
→ Eval
→ CLng("&h8000")
→ GetNumWithZeroAtLeft
← ▼ ▲
Trim2, LTrim2, RTrim2
Function Trim2( v as string ) as string
文字列の端の空白文字だけでなく、タブ文字、改行文字もカットした文字列を返します。
Function LTrim2( v as string ) as string
Function RTrim2( v as string ) as string
(src)
← ▼ ▲
AlignString
Function AlignString( in_InputData as integer, in_MinimumLength as integer,
in_FillingCharacter as string, in_ValueIfOver as Empty or string ) as string
文字列や数値の左または右に、空白や 0 などを並べて、幅を合わせた文字列に変換します。
out = AlignString( "a", 3, " ", Empty ) : Assert out = " a"
out = AlignString( 123, 6, "0", Empty ) : Assert out = "000123"
out = AlignString(-123, 6, " ", Empty ) : Assert out = " -123"
out = AlignString( "AB",-5," ", Empty ) : Assert out = "AB "
out = AlignString(-123, 3, " ", "###" ) : Assert out = "###"
out = AlignString(-123, 3, " ", Empty ) : Assert out = "-123"
out = AlignString(-123, 6, " ", "###" ) : Assert out = " -123"
【引数】
in_InputData
in_MinimumLength
変換される文字列や数値
返り値の文字数の最小値、マイナス=左詰め
in_ValueIfOver
in_MinimumLength を超えたときの返り値、または、Empty
サンプル
幅を合わせた文字列
返り値
ソース
→ vbslib.vbs
in_ValueIfOver = Empty のときは、返り値が in_MinimumLength を超える文字数になる
可能性があります。
テスト
→ T_Str.vbs
T_AlignString
in_FillingCharacter
幅を広げるときに並べる文字
←
↓