←
▼
▲
<Variable name="${Var1}" value="ABC"/>
<Project path="C:\${Var1}.txt"/>
Set root = LoadXML( "Sample.xml", Empty )
Set variables = LoadVariableInXML( root, "Sample.xml" )
data = root.selectSingleNode( "Data" ).getAttribute( "data" )
Assert data ="${Var1}DEF"
data = variables( data )
Assert data = "ABCDEF"
Function LoadVariableInXML( in_RootXML_Element as IXMLDOMElement, in_FilePathOfXML as string )
as LazyDictionaryClass
XML の
【引数】
in_RootXML_Element
in_FilePathOfXML
in_RootXML_Element が書かれている XML ファイルのパス
サンプル
Sample.xml
スクリプト:
<Sample>
<Variable name="${Var1}" value="ABC"/>
<Variable name="${Var2}" value="XYZ"/>
<Data data="${Var1}DEF"/>
</Sample>
variables
<Variable name="${Var1}" value="ABC"/>
テスト
→ vbslib.vbs
ソース
→ T_LazyDictionary.vbs
variables
変数の定義の例:
T_LazyDictionaryXML
変数名は ${Var1} で、その値は ABC です。
変数を参照するときは、DOM API で値を取得した後で、評価(変数の展開を)する処理を書く
必要があります。(下記サンプル コードを参照)
type 属性を "FullPathType" にすると、value 属性を相対パスとして、変数を参照したときは
フル・パスが返ります。 通常、基準フォルダーは XML ファイルがあるフォルダーです。
<Sample>
<Variable name="${FullPath1}" value="..\File.txt" type="FullPathType"/>
<Variable name="${FullPath2}" value="${FullPath1}"/>
<Variable name="${ErrorPath}" value="${FullPath1}" type="FullPathType"/>
<Variable name="${SearchParent}" value="...\File.txt" type="FullPathType"/>
</Sample>
スクリプト:
Sample.xml
Set xml = new FilePathClass
xml.FilePath = "Sample.xml"
Set xml.Text = LoadXML( xml.FilePath, Empty )
Set variables = new_LazyDictionaryClass( xml )
base_path = GetParentFullPath( xml.FilePath )
Assert variables( "${FullPath1}" ) = GetFullPath( "..\File.txt", base_path )
Assert variables( "${FullPath2}" ) = GetFullPath( "..\File.txt", base_path )
Assert variables( "${ErrorPath}" ) = _
base_path +"\"+ GetFullPath( "..\File.txt", base_path )
'// Example: "C:\Folder\Sub\C:\Folder\File.txt"
Assert variables.Formula( "${ErrorPath}" ) = "C:\Folder\Sub\${ErrorPath}"
サンプル
${FullPath1}
XML に記述する value 属性は、相対パスを指定してください。 value 属性がフル パスの値を
持つ変数から始まるときは、type 属性に "FullPathType" を指定しないでください。
フル・パスに変換するタイミングは、new_LazyDictionaryClass 関数を呼び出したときで、
遅延評価ではありません。
${Var1}
2つの辞書を合成するときは、
を呼び出してください。
XML のルート要素オブジェクト、または、FilePathClass のオブジェクト
new_LazyDictionaryClass 関数の引数に FilePathClass のオブジェクトを指定すると、
FilePathClass::FilePath の親フォルダーを基準にします。 引数に文字列を指定した場合は、
相対パスの基準はカレント・フォルダーになります。 XML のルート要素オブジェクトは、
FilePathClass::Text に指定してください。
に設定すると、値をフル パスにすることができます。
value 属性を、ピリオド 3つから始めると、内部で
を呼び出して、親フォルダー
を探しにいきます。
<Variable name="${FullPath1}" value="..\File.txt" type="FullPathType"/>
type="FullPathType"
サンプル
返り値
遅延評価する辞書
値に
ことができます。
<Variable name="${A}" value="${USERPROFILE}\Document\A"/>
サンプル
USERPROFILE は、OS の環境変数の名前です。
<Variable name="${Desktop}" value="${USERPROFILE}\Desktop"/>
関連
Variable タグに対応した XML ファイルには、${ } 形式の変数の定義と、変数の参照を記述する
ことができます。
で、Variable タグによる変数定義をロードします。
変数の参照を記述できる場所は、XML ファイルの種類やアプリケーションによって異なります。
それぞれの仕様を確認してください。 たとえば、Project タグの path 属性に変数を指定できる
仕様の場合、以下のように記述できます。
${Var1}
変数の定義と参照の例:
こともできます。
によって管理されるため、遅延評価されます。
${ } 変数は、
変数の参照を記述できる場所には、
スクリプトの内部では、
変数の定義は、以下のように Variable タグを記述します。 ただし、name は、${ から始まり、} で
終えてください。 Variable タグは、XML の中のどこでも記述することができます。
path 属性は C:\ABC.txt になります。
または
${USERPROFILE}
${USERPROFILE}
${ } の中に OS の環境変数名を記述すると、その値を参照することができます。
変数を定義する Variable タグの value 属性や、${ } 変数を参照できる場所に、OS の環境変数の
参照を記述できます。
変数の参照を記述する場所によって値を変更するときは、
で定義してください。
${Var1}
${Var1}
手動で変数の展開をするときは、
が使えます。
<Variable name="${A}" value="${UpperCase( abc, def )}"/>
サンプル
参考
アプリケーションによっては、${ } の中に ( ) が付いた関数呼び出しを記述することができます。
で定義された変数を持つ、遅延評価する辞書を生成します。
ことができます。
<Project path="${UpperCase( C:\File.txt )"/>
→ vbslib_mini.vbs
←
▼
▲
Function LoadLocalVariableInXML( in_CurrentXML_Element as IXMLDOMElement,
in_GlobalVariables as LazyDictionaryClass, in_FilePathOfXML as string ) as LazyDictionaryClass
XML の LocalVariable タグで定義された変数を持つ、遅延評価する辞書を生成します。
【引数】
in_CurrentXML_Element
in_GlobalVariables
の返り値
変数の参照がある XML 要素のオブジェクト
in_FilePathOfXML
in_CurrentXML_Element が書かれている XML ファイルのパス
テスト
T_LazyDictionaryXML_Local
→ T_LazyDictionary.vbs
ソース
→ vbslib.vbs
遅延評価する辞書
返り値
LocalVariable タグを記述する場所は、変数を参照している XML タグの兄弟ノード、または、親方向の
ノードの子ノードに記述してください。 同じ名前の変数を記述したときは、変数を参照している XML
タグに近い定義の値が得られます。
と同じく変数を定義する XML タグですが、参照する場所によって
LocalVariable タグは、
値が異なるローカル変数を定義することができます。
<LocalVariable name="${Var1}" value="ABC"/>
ローカル変数の定義の例:
変数名は ${Var1} で、その値は ABC です。
${Var1}
<Root>
<Tree>
<LocalVariable name="${Var1}" value="AA"/>
<ProjectA path="${Var1}.txt"/>
</Tree>
<Tree>
<ProjectB path="${Var1}.txt"/>
<LocalVariable name="${Var1}" value="BB"/>
</Tree>
<Tree>
<ProjectC path="${Var1}.txt"/>
</Tree>
<LocalVariable name="${Var1}" value="CC"/>
</Root>
ローカル変数の参照の例:
ProjectA の path 属性は AA.txt になります。
ProjectB の path 属性は BB.txt になります。
ProjectC の path 属性は CC.txt になります。
${Var1}
${Var1}
${Var1}
ただし、Variable タグが定義できる XML ファイルやアプリケーションであっても、LocalVariable タグは
無視される場合があります。 また、XML 属性やテキストによっては、LocalVariable タグによって定義
された変数を参照できない場合もあります。 それぞれの仕様を確認してください。 逆に LocalVariable
タグが使える場所では、 Variable タグも記述できます。
に設定すると、値をフル パスにすることができます。
値に
ことができます。
in_CurrentXML_Element 引数に指定した XML要素の親方向のすべての XML要素の直下にある
<LocalVariable> と、すべての <Variable> による変数の定義が返り値に含まれます。
→ T_LazyDictionaryXML_Local.xml
path = "Sample.xml"
Set root = LoadXML( path, Empty )
Set global_variables = LoadVariableInXML( root, path )
Set project_tag = root.selectSingleNode( "Tree/ProjectA" )
Set variables = LoadLocalVariableInXML( project_tag, global_variables, path )
path = project_tag.getAttribute( "path" )
path = variables( path )
サンプル
"Tree/ProjectA"
variables
variables
in_CurrentXML_Element 引数に、XML要素 A の兄弟 XML要素 B を指定して返る辞書は、XML要素 A を
指定して返る辞書と同じ内容です。
←
▼
▲
Function new_LazyDictionaryClass( RootXML_Element as IXMLDOMElement ) as LazyDictionaryClass
XML の Variable タグで定義された変数を持つ、遅延評価する辞書を生成します。
【引数】
RootXML_Element
XML のルート要素オブジェクト
返り値
遅延評価する辞書
RootXML_Element 引数
XML のルート要素オブジェクト、または、FilePathClass のオブジェクト
FilePathClass のオブジェクト
以下のどちらかを指定できます。
注意
廃止されました。 代わりは、
←
▼
▲
Function GetPathLazyDictionary() as LazyDictionaryClass
パスに関する変数か定義された辞書を返します。
【引数】
返り値
パスに関する変数か定義された辞書
→ vbslib.vbs
ソース
OSの環境変数だけでなく、下記の変数も参照することができます。
${vbslib}
${scriptlib}
vbslib Prompt.vbs があるフォルダーのフル パス。
vbslib Prompt.vbs を起動したときだけ定義されます。
scriptlib フォルダーのフル パス。
と異なり、末尾に \ なし。
←
▼
▲
ParseDollarVariableString "abc ${VAR1}, ${VAR2} def", sub_strings, variables
Assert IsSameArray( sub_strings, Array( "abc ", ", ", " def" ) )
Assert IsSameArray( variables, Array( "${VAR1}", "${VAR2}" ) )
Sub ParseDollarVariableString( the_String as string, out_SubStringArray as array of string,
out_VariableArray as array of string )
文字列の中の ${ } を使った変数の部分とそれ以外の部分に分割します。
【引数】
the_String
out_SubStringArray
分割する前の文字列
(出力) 変数以外の部分の配列
out_VariableArray
(出力) 変数の部分の配列
サンプル
ソース
関連
→ ToolsLib.vbs
→ T_Str.vbs
テスト
T_ParseDollarVariableString
文字列の先頭に "${ }" があるときは、out_SubStringArray(0) = "" になります。
←
▼
▲
配列 (Array)
←
▼
▲
Function new_EmptyArray( in_UBound as integer ) as array
指定した要素数の空要素を持つ配列を生成します。
ソース
→ vbslib.vbs
VBScript (WSH) だけでなく、エクセル VBA でも使えます。
【引数】
in_UBound
最大配列番号。 要素数−1
返り値
生成した配列
←
▼
▲
Sub AddArrElem( Dst, Src )
配列の要素を追加コピーします。
【引数】
Dst
Src
コピー先配列。 この配列の末尾に追加
コピー元の要素が入った配列、またはコピー元の単体。
これまで入っていた要素の後に追加します。
→ AddElems (ArrayClass)
Dst には、Me.Property 形式ではなく、Property 形式にしてください。(下記)
AddArrElem Me.SampleArray, Array( 1,2 )
×:追加されない
AddArrElem SampleArray, Array( 1,2 )
○:追加される
Me.
AddArrElem arr1, arr2 '// Set "arr1"
AddArrElem arr1, new ClassA '// Set "arr1"
関連
テスト
サンプル
→ T_Arr.vbs
T_Arr1
ソース
→ vbslib.vbs
←
▼
▲
Function AddArrElemEx( Dst, Src, IsReturn ) as Dst or Empty
配列の要素を追加コピーします。(機能拡張版)
【引数】
Dst
Src
コピー先配列。 この配列の末尾に Src 引数を追加
コピー元の要素が入った配列、またはコピー元の単体。
IsReturn
True = 返り値は追加コピーした内容、False = 返り値は Empty
参考
ソース
→ vbslib.vbs
←
▼
▲
input_array = Array( "a", "b", Array( "ca", "cb" ), "d", Array( "ea", "eb" ) )
FlatArray out_array, input_array
Assert IsSameArray( out_array, Array( "a", "b", "ca", "cb", "d", "ea", "eb" ) )
Sub FlatArray( out_FlatArray as array, NestedArray as array )
配列の中に配列がネストして入っているとき、フラットにします。
【引数】
out_FlatArray
NestedArray
(出力) フラットにした配列
配列がネストして入っている配列
サンプル
テスト
→ T_Arr.vbs
T_FlatArray
ソース
→ vbslib.vbs
←
▼
▲
Sub CopyArr( Dst, Src )
配列の要素をコピーします。
【引数】
Dst
Arr
コピー先
コピー元
(src)
Arr が配列ではないときは、Dst(0) に Src をコピーします。
Dst に ArrayClass::Items を指定してもコピーした内容は ArrayClass に格納されません。
ArrayClass::Copy を使ってください。
廃止されました。
Dim arr() とすると arr = Array はできませんが、 Dim arr とすると arr = Array ができます。
←
▼
▲
Function SearchInSimpleArray( InData as variant, InArray as array of variant,
OutBaseNumOrArray as array of variant, DefaultOut as variant ) as variant
配列を検索して、別の配列の内容を返します。
【引数】
InData
InArray
配列の要素と比較する値。 数値、文字列など = で判定できるもの
InData を比較する値を要素に持つ配列
OutBaseNumOrArray に指定した配列の要素の1つなど
返り値
InData が InArray に見つからなかったときに出力する値
出力する値を要素に持つ配列。 または、出力の最小数値
DefaultOut
OutBaseNumOrArray
(src)
num = SearchInSimpleArray( "SymbolB", _
Array( "SymbolA", "SymbolB" ), _
Array( 1, 2 ), _
Empty )
'// num = 2
num = SearchInSimpleArray( "SymbolB", Array( "SymbolA", "SymbolB" ), 5, Empty )
'// num = 6
関連
出力の最小数値が 5 で、2番目の配列要素にヒットしたので、5 + ( 2 -1 ) = 6 を返します。
サンプル
サンプル
←
▼
▲
Function GetFirst( in_Collection as variant ) as variant
Assert GetFirst( Array( 1, 2 ) ) = 1
コレクションの最初の要素を返します。
【引数】
in_Collection
配列や辞書コレクション
返り値
サンプル
ソース
配列やコレクションの最初の要素、辞書の場合は最初のキー
→ vbslib.vbs
関連
←
▼
▲
Function IsSameArray( Array1, Array2 ) as boolean
配列のすべての要素が等しいか判定します。
各要素は = で判定します。
要素数も等しいか調べます。
順番も合っている必要があります。
(src)
テスト
ソース
→ T_Arr.vbs
T_IsSameArray
→ vbslib.vbs
Array1 = Empty, Array2 = Empty のときは、True を返します。
Array1, Array2 は、Empty, 配列型、ArrayClass 型のいずれかを指定できます。
関連
←
▼
▲
テスト
ソース
→ T_Arr.vbs
T_IsSameArrayOutOfOrder
→ vbslib.vbs
Function IsSameArrayOutOfOrder( in_Array1 as array, in_Array2 as array, Option_ ) as boolean
配列のすべての要素が等しいか判定します。 ただし、順番が異なっていても等しいとします。
各要素は = で判定します。
Option_ 引数
Empty または、下記の論理和 (or) が指定できます。
c.StopIsNotSame
c は、g_VBS_Lib です。
違った要素を見つけた瞬間に、デバッガーで停止します
関連
←
▼
▲
Function IsSameArrayEx( Array1 as array, Array2 as array, Option_ as IsSameArrayExOptionClass )
as boolean
配列のすべての要素が等しいか判定します。
→ vbslib.vbs
ソース
ソース
→ vbslib.vbs
.IsOutOfOrder
.IsStopNotSame
.CompareFunction
.ParameterOfCompareFunction
順番が異なっていても等しいとするかどうか
違った要素を見つけた瞬間に、デバッガーで停止します
CompareFunction の第3引数に渡す値
←
▼
▲
Sub ReverseObjectArray( in_Array as array, out_Array as array )
配列を内容(オブジェクトのみ)を逆順にします。
【引数】
in_Array
out_Array
配列。逆順にする前の内容
(出力) 逆順の配列の内容
配列の要素が、オブジェクト以外が入っていたり、Empty になっているとエラーになります。
out_Array と in_Array は同じ配列を指定できません。
ただし、in_Array 引数に、array_object.Items (array_object は ArrayClass) を指定したら、
out_Array 引数に、array_object を指定できます。 ただし、ArrayClass ではなくなります。
テスト
→ T_Arr.vbs
T_ReverseObjectArray
で変換してください。
ソース
→ vbslib.vbs
関連
サンプル
ReverseObjectArray an_array.Items, an_array
For Each an_item In an_array
Next
←
▼
▲
Sub Reverse_COM_ObjectArray( in_Array, out_Array )
テスト
→ T_Arr.vbs
T_ReverseObjectArray
ソース
→ vbslib.vbs
.Count プロパティで要素数を参照する配列を、逆順にします。
参考
←
▼
▲
ReverseNotObjectArray
Sub ReverseNotObjectArray( in_Array, out_Array )
ソース
→ vbslib.vbs
要素がオブジェクト型ではない配列を、逆順にします。
←
▼
▲
Sub RemoveObjectArray( in_out_Array, ElementObject )
オブジェクトが格納された配列から、指定したオブジェクトを除外します。
【引数】
in_out_Array
ElementObject
オブジェクトが格納された配列
除外するオブジェクト
ソース
→ vbslib.vbs
関連