(for Internet Explorer)
← ▼ ▲
↑
MultiTextXML_Class
関連
<?xml version="1.0" encoding="UTF-8"?><MultiText><Text id="1"><![CDATA[
abc def
]]></Text><Text id="second"><![CDATA[
------------------------------------------------------------
abc
def
------------------------------------------------------------
]]></Text></MultiText>
abc def
abc
def
ファイルのパス（アドレス）に "Sample.xml#1" を指定すると、下記の文字列が取得できます。
最後に改行が入りますが、アプリケーションによっては最後の改行を１つ削除します。
Sample.xml
ファイルのパス（アドレス）に "Sample.xml#second" を指定すると、下記の文字列が取得できます。
最後に改行が入りますが、アプリケーションによっては最後の改行を１つ削除します。
タグ名は、上記と異なるタグ名でも構いませんが、id 属性は必須です。
encoding 属性の設定値は、ファイルの文字コードの設定に合わせてください。
例： UTF-8、UTF-16、Shift_JIS など
マルチ・パート・テキストXML
複数のテキスト・ファイルを１つにまとめた XML ファイル。
先頭文字 （<![CDATA[ の直後） が改行文字の時は、その改行文字は取得されません。
改行文字から始めるときは、２つの改行文字をファイルに記述してください。
最初の行や最後の行が ---- のように - が４つ以上あるだけの行のときは、その行は取得され
ません。 コメントとして無視されます。 ---- から始まるテキストは、2行目から記述してください。
ファイルに同じ id 属性が存在すると、上の方にある部分のみ有効になります。
ファイルのパス（アドレス）に "Sample.xml" を指定すると、ファイルの全体の内容が取得できます。
マルチ・パート・テキストXML
→ MultiTextXML_Class (clib)
ファイルの内容を内部でキャッシュします。
参考
→ XML
----
→ GetText (MultiTextXML_Class)
→ IsExist (MultiTextXML_Class)
→ XML_ReadCacheClass
マルチ パート テキストXML の id 属性を、グループ名＋メンバー名として階層化して、すべての
グループに関してループするコードは、以下のようになります。 なお、a_tail には、代表とする
メンバー名を設定してください。
Set test_data = new MultiTextXML_Class
'// Set "test_symbols"
a_tail = "_TestText"
Set test_symbols = new ArrayClass
Set root = LoadXML( test_path, Empty )
For Each elem In root.selectNodes( "./Text" )
id = elem.getAttribute( "id" )
If Right( id, Len( a_tail ) ) = a_tail Then
test_symbols.Add Left( id, Len( id ) - Len( a_tail ) )
End If
Next
'// ...
For Each test_symbol In test_symbols.Items
text = test_data.GetText( test_path +"#"+ test_symbol +"_TestText" )
ans = test_data.GetText( test_path +"#"+ test_symbol +"_Answer" )
Next
→ セクション化されたテキスト
→ CutIndentOfMultiLineText
を内部で呼び出しており、id 属性と供に cut_indent 属性が
CutIndentOfMultiLineText 関数
あれば、indent 属性や改行コードも指定することができます。
LF\n
CR+LF
← ▼ ▲
→ T_XML.vbs
→ vbslib.vbs
Set files = new MultiTextXML_Class
text = files.GetText( "Files\T_MultiTextXML_1.xml#1" )
Function MultiTextXML_Class::GetText( URL as string ) as string
【引数】
URL
ファイルパス +"#"+ ID属性の値、または、ファイルパス
テキスト・ブロックの内容
返り値
テスト
サンプル
ソース
GetText (MultiTextXML_Class)
ファイルを、リードします。
マルチ・パート・テキストXML
T_MultiTextXML
← ▼ ▲
IsExist (MultiTextXML_Class)
Function MultiTextXML_Class::IsExist( URL as string ) as boolean
ファイルに、指定の id があるかどうかを返します。
返り値
指定の id があるかどうか
ファイルパス +"#"+ ID属性の値、または、ファイルパス
URL
【引数】
マルチ・パート・テキストXML
→ T_XML.vbs
→ vbslib.vbs
テスト
ソース
Set files = new MultiTextXML_Class
If files.IsExist( "Files\T_MultiTextXML_1.xml#1" ) Then ...
サンプル
T_MultiTextXML_IsExist
← ▼ ▲
GetXPath
Function GetXPath( DOMObject as IXMLDOMElement, ShowAttrs as string ) as string
指定した XML の DOM オブジェクトがある場所を表す XPath を返します。
【引数】
DOMObject
IXMLDOMElement または IXMLDOMAttribute
Empty、または、XPath に含める XML 属性名、またはその配列
ShowAttrs
(src)
DOMObject 引数が IXMLDOMElement クラスのときは、ルート XML 要素からのパスは含まれます。
DOMObject 引数が IXMLDOMAttribute クラスのときは、ルート XML 要素からのパスは含まれません。
その理由は、標準の DOM の仕様書では、IXMLDOMAttribute クラスから、所属する XML 要素が
取得できないからです。
サンプル
Dim node
Dim root : Set root = LoadXML( "sample.xml", Empty ) ' as IXMLDOMElement
'// GetXPath( root, Empty ) = "/Root"
node = root.selectNodes( "/Root/Test1" )
'// GetXPath( node(0), Empty ) = "/Root/Test1"
node = root.selectNodes( "/Root/Test2/@id" )
'// GetXPath( node(0), Empty ) = "@id"
node = root.selectNodes( "/Root/Test2[@id='1']/Sub" )
'// GetXPath( node(0), Array("id","attr") ) = _
'// "/Root/Test2[@id='1' and @attr='a']/Sub"
テスト
→ T_XML.vbs # [T_XPath]
XPath
返り値
参考
→ XPath
ShowAttrs 引数に指定した、返り値に含める XML 属性は、XPath に含まれるすべて XML 要素、
つまり、親ノードの XML 要素に対しても、XML 属性を含めます。
← ▼ ▲
GetXmlAttribute
Function GetXmlAttribute( BaseXmlElement, XPathForXmlElement, AttrName )
XML 属性の値を返します。
【引数】
BaseXmlElement
XPathForXmlElement
XPathForXmlElement の基準となる XML要素（タグ）
属性を変更する XML 要素（タグ） への XPath または Empty
返り値
XML 属性の値、文字列型のみ、Empty=属性なし
XML 属性の名前
AttrName
(src)
サンプル：
参考
Dim root : Set root = LoadXML( "in.xml", Empty ) ' as IXMLDOMElement
value = GetXmlAttribute( root, "./Tag1", "attr1" )
attr1
Tag1
GetXmlAttribute
テスト
→ T_XML.vbs # [T_GetXmlAttribute]
→ getAttribute (IXMLDOMElement)
→ RegRead
廃止されました。
→ XmlRead
← ▼ ▲
XPath に指定したタグ（XML要素）が存在しないときは、作成します。 このとき、自動的に改行文字と
タブ文字が入ります。 ただし、ルートのXMLタグに
XmlWrite
Function XmlWrite( BaseXmlElement as IXMLDOMElement, XPath as string, Value as string ) as boolean
XML のタグの間のテキスト、または XML の属性の値を変更します。
【引数】
BaseXmlElement
XPath
XPath の基準となる XML要素（タグ）
タグの間のテキスト、または XML の属性の位置を表す XPath
返り値
変化があったかどうか
(src)
変更後のテキストまたは XML 属性の値、""=値なし、Empty=削除する
Value
タグの間のテキストは、厳密には XPath = "/Root/Elem/text()" ですが、XPath = "/Root/Elem" を指定
してください。
サンプル
→ setAttribute (IXMLDOMElement)
参考
Dim b, is_change, root
Set root = LoadXML( "in.xml", Empty ) '// as IXMLDOMElement
b= XmlWrite( root, "./Tag1/@attr1", 123 )
is_change = is_change or b
If is_change Then root.ownerDocument.save "out.xml"
123
Tag1/@attr1
XmlWrite
テスト
→ T_XML.vbs # T_XmlWrite
→ RegWrite
→ Write (ReplaceXmlFile1)
関連
→ OpenForReplaceXML
xml:space="preserve"
があるとき、かつ、タグの開始から
XPath = "/Root/Elem" （XML要素へのパス）のとき、Value = "" なら、<Elem/> となります。
XPath = "/Root/Elem" （XML要素へのパス）のとき、Value = Empty なら、<Elem/> を削除します。
XPath = "/Root/Elem/@attr" （XML属性へのパス）のとき、Value = "" なら、<Elem attr=""/> となります。
XPath = "/Root/Elem/@attr" （XML属性へのパス）のとき、Value = Empty なら、<Elem/> となります。
終了までが１行の中にある部分の中に、新規タグを作成するときは、改行文字もタブ文字も入りません。
← ▼ ▲
XmlWriteEncoding
(src)
Sub XmlWriteEncoding( RootXmlElement as IXMLDOMElement, CharSet as string )
XML ファイルの文字コードを指定します。
【引数】
BaseXmlElement
CharSet
ルートの XML要素（タグ）
文字コード
→ new_TextFileCharSetStack
テスト
→ T_XML.vbs # T_XmlWrite
← ▼ ▲
XmlInsertAfter
Sub XmlInsertAfter( in_out_ReferenceNode as IXMLDOMElement, in_NewNode as IXMLDOMElement )
兄弟関係の次になるように、XML 要素を追加します。
【引数】
in_out_ReferenceNode
in_NewNode
XPath の基準となる XML要素（タグ）
タグの間のテキスト、または XML の属性の位置を表す XPath
返り値
テキストまたは XML 属性の値。文字列型
ソース
→ vbslib.vbs
関連
→ insertBefore (IXMLDOMElement)
← ▼ ▲
XmlAttr
Function XmlAttr( s as string ) as string
" " で囲む XML の属性値に（
サンプル：
s = XmlAttr( "<""'" )
s は、"&lt;&quot;'" になります
(src)
関連
→ xml プロパティ (vbsool)
→ T_XML.vbs # [T_XmlText]
テスト
→ StrT_changeToXmlAttr (clib)
に）変換します。
実体参照
→ XmlAttrA
' ' で囲むとき
→ ParseAttributesInXML
→ XPath のエスケープ文字、バックスラッシュ \
← ▼ ▲
XmlAttrA
(src)
s は、"&lt;""&apos;" になります
s = XmlAttrA( "<""'" )
サンプル：
' ' で囲む XML の属性値に（実体参照に）変換します。
Function XmlAttrA( s as string ) as string
← ▼ ▲
XmlText
Function XmlText( s as string ) as string
XML のテキスト（タグの外）に（
Assert XmlText( "<""" ) = "&lt;"""
関連
→ xml プロパティ (vbsool)
→ T_XML.vbs
テスト
サンプル
→ XmlText コマンド
に）変換します。
実体参照
T_XmlText
→ vbslib.vbs
ソース
→ MultiTextXML_Class
← ▼ ▲
XmlSort
Sub XmlSort( BaseXmlElement as IXMLDOMElement, XPath as string,
CompareFunc as function, CompareFuncParam as variant )
XML のタグを並べ替えします。
【引数】
BaseXmlElement
XPath
XPath の基準となる XML要素（タグ）
並べ替えするタグの位置を表す XPath
CompareFunc
テスト
ソース
→ vbslib.vbs
CompareFunc の第3引数
CompareFuncParam
比較関数
→ T_XML.vbs
T_XmlSort
Sub Main()
Set root = LoadXML( "Sample.xml", Empty )
XmlSort root, "T", GetRef( "SampleCompare" ), Empty
End Sub
Function SampleCompare( in_LeftTag, in_RightTag, in_Parameter )
left_text = in_LeftTag.selectSingleNode( "./EN/text()" ).nodeValue
right_text = in_RightTag.selectSingleNode( "./EN/text()" ).nodeValue
SampleCompare = StrComp( left_text, right_text, 1 )
End Function
サンプル
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<T><JP>日本語</JP><EN>2.Japanese</EN></T>
<T><JP>英語</JP><EN>3.English</EN></T>
<T><JP>仏語</JP><EN>1.French</EN></T>
</Translate>
<?xml version="1.0" encoding="UTF-16"?>
<Translate>
<T><JP>仏語</JP><EN>1.French</EN></T>
<T><JP>日本語</JP><EN>2.Japanese</EN></T>
<T><JP>英語</JP><EN>3.English</EN></T>
</Translate>
T タグをソートする。 ソートキーは、T/EN。
← ▼ ▲
ObjToXML
Function ObjToXML( TagName as string, Objs as object or array, Opt as variant ) as string
オブジェクトの基本的なデータを XML 文字列に変換します。
s = ObjToXML( Empty, obj, Empty )
サンプル：
【引数】
TagName
ルート・タグ名、Empty にすると、ルートタグを追加しません。
返り値
Objs
XML データの内容にするオブジェクト、またはその配列
Opt
Empty を指定してください
XML 文字列
関連
→ xml プロパティ (vbsool)
オブジェクトのクラス名と、Name プロパティ、DefinePath プロパティから XML データを作成します。
他のプロパティも含んだ XML データは、xml プロパティを作成してください。
(src)
→ SetDefinePath
→ GetTab
← ▼ ▲
ChangeToXml
Function ChangeToXml( XML as string or object ) as IXMLDOMElement
XML 文字列などを、XML 要素オブジェクトに変換します。
IXMLDOMElement
→ loadXML メソッド (vbsool)
参考
(src)
・XML が記述された文字列
LoadXML
などで取得した
IXMLDOMElement
引数に指定できるものは、次のものがあります。
・
・ParentProcess や ChildProcess
→ /ChildProcess オプション
XML ファイルをロードする
← ▼ ▲
SetXmlAttribute
Function SetXmlAttribute( BaseXmlElement as IXMLDOMElement, XPathForXmlElement as string,
AttrName as string, AttrValue as string ) as boolean
XML 属性の値を変更します。
【引数】
BaseXmlElement
XPathForXmlElement
XPathForXmlElement の基準となる XML要素（タグ）
属性を変更する XML 要素（タグ） への XPath または Empty
返り値
変更後の XML 属性の値、""=値なし、Empty=属性を削除する
AttrValue
変化があったかどうか
(src)
サンプル：
→ setAttribute (IXMLDOMElement)
参考
Dim b, is_change
Dim root : Set root = LoadXML( "in.xml", Empty ) '// as IXMLDOMElement
b= SetXmlAttribute( root, "./Tag1", "attr1", "1234" )
is_change = is_change or b
If is_change Then root.ownerDocument.save "out.xml"
1234
attr1
Tag1
SetXmlAttribute
テスト
→ T_XML.vbs # T_SetXmlAttribute
XML 属性の名前
AttrName
XPathForXmlElement に該当する XML 要素が複数あったときは、すべての XML 要素の属性を変更
します。
XPathForXmlElement に該当する XML 要素が無かったときは、XML 要素を追加します。
→ RegWrite
廃止されました。
→ XmlWrite
← ▼ ▲
UpdateLineAttributeInXML
Sub UpdateLineAttributeInXML( in_Path as string, in_AttributeName as string )
XML ファイルの中の行番号を値に持つ XML属性の値を、実際の行番号に合わせます。
【引数】
in_Path
内容を置き換える XML ファイルのパス
UpdateLineAttributeInXML "Sample.xml", "@line_num"
サンプル
→ T_XML.vbs
テスト
→ vbslib.vbs
ソース
内部で XML の構文解析は行いません。 単純に置き換えているだけです。
Sample.xml ファイルを処理する前：
スクリプト：
<Tag line_num="">
<Tag2
line_num="999">
line_num="999"
</Tag>
Sample.xml ファイルを処理した後：
<Tag line_num="1">
<Tag2
line_num="3">
line_num="4"
</Tag>
"@"+ XML属性の名前
in_AttributeName
T_UpdateLineAttributeInXML
キーワード：
line_num
← ▼ ▲
関連
→ new_LazyDictionaryClass
XML の Variable タグ
→ ToRegularXML
XML ファイルを整形します
← ▼ ▲
関連
→ BinaryArray クラス
バイナリ ファイル
→ OpenForRegFile
レジストリ ファイル
→ StringStream クラス
文字列 TextStream
メイク ファイル
→ MakeFileClass （メイクファイル）
← ▼ ▲
プロセス制御と include
→ call_vbs
指定した VBScript ファイルの中の関数を呼び出し、終了するまで待ちます。
→ include
クラス定義や関数定義が入った VBSファイルをインクルードします。
→ IsDefined
指定したシンボルの関数が定義されているかどうかを返します。
現在のプロセスのまま
→ ArgumentExist
コマンドライン・オプションが指定されているかどうかを返します。
→ env
環境変数を展開します
→ start
指定したコマンドラインを新プロセスで実行します。 終了を待ちません。
→ RunProg
指定したコマンドラインを新プロセスで実行します。 終了を待ちます。
→ Sleep
指定した時間だけ待ちます。
→ WaitForFile
指定したファイルが作られるまで待ちます。
新プロセス
待ち
[ テスト ]
→ エラー発生時の動作
→ 正常終了時の動作
→ プログラム起動 (VBS)
→ バージョン判定、環境変数
関連
→ g_debug_params
→ sudo
管理者権限を持った新プロセスで実行します。 終了を待ちます。
→ GetWScriptArgumentsUnnamed
コマンドラインの引数を返します。 （改良版）
他にもあります。左のツリーから選択してください。
← ▼ ▲
start
Sub start( cmdline as string )
指定したコマンドラインを新プロセスで実行します。 終了を待ちません。
cmdline 引数に環境変数を含めることができます。 （%var% 形式）
start """%ProgramFiles%\Movie Maker\moviemk.exe"""
サンプル：
(src)
cmdline 引数にフォルダやデータファイルのパスを指定すると、そのフォルダや
ファイルをダブルクリックしたときと同じように開きます。
コマンドラインでは、パスをダブルクォーテーションで囲むこと
ファイルが見つからないと、E_WIN32_FILE_NOT_FOUND エラーになります
→ IShellDispatch2::ShellExecute
関連
Dim cmd
cmd = Setting_getEditorCmdLine( 1 )
cmd = Replace( cmd, "%1", "C:\file.txt" )
start cmd
サンプル：
Setting_getEditorCmdLine
CPU がマルチコアであれば、複数のプロセスによる並列処理になり高速になります。
→ T_Start_Manually.vbs # [T_StartErr]
テスト
start で実行した内容のログを取る
start "cmd.exe /C cscript //nologo sample.vbs | "+ g_vbslib_ver_folder +_
"safetee\safetee.exe -o Sample_out.txt & exit"
safetee
cmd.exe /C を経由して実行してください。 > でリダイレクトすると内容が表示されない
ので、パイプを経由して safetee（または tee）を実行してください。 また、パイプを
使う場合、実行後にウィンドウが残らないように、exit してください。
→ GetCScriptGUI_CommandLine
start 関数から別の関数を呼び出すとき
cmdline 引数に、\?InCurrentProcessFunc\(関数名) を指定すると、指定した関数を
呼び出します。 呼び出した関数から返ると、start 関数から戻ります。
キーワード：
InCurrentProcessFunc
start の後にすぐに終了すると、開けないことがあります。
Sleep
で、すぐに終了しないようにしてください。
ホームページを開く
start "http://www.example.com/"
start """C:\Program Files\Internet Explorer\iexplore.exe"" "+ a_URL
start するプロセスにパラメーターを渡す
→ g_InputCommand_Args
← ▼ ▲
RunProg
Function RunProg( cmdline as string, stdout_stderr_redirect as string ) as integer
指定したコマンドラインを新プロセスで実行します。 終了を待ちます。
【引数】
cmdline
stdout_stderr_redirect
コマンドライン（実行ファイルパス＋パラメータ）
出力先のファイルパス(下記)
返り値
エラーレベル（main 関数の返り値）
Empty や "" のときは、標準出力へ出力し、ファイルに保存しません。
"nul" のときは、標準出力へ出力せず、出力内容を破棄します。
stdout_stderr_redirect 引数
→ CheckTestErrLevel
コマンド・プロンプトで使えるコマンドを実行するときは、次のようにしてください。
RunProg "cmd /c (dir > files.txt)", ""
RunProg "cmd /c (cd sub & dir > ..\files.txt)", ""
複数のコマンドを実行するときは、& をつけてください。
(src)
プロセスが終了するまで、関数内部で待ちます。
VBScript を実行するときは、cscript を経由してください。
vbslib の input などを使っているときは、/GUI_input:1 または /set_input を指定してください。
RunProg "cscript //nologo sample.vbs /GUI_input:1", ""
新プロセスのカレントフォルダは、RunProg を呼び出す直前のカレントフォルダーになります。
コマンドプロンプトから標準入力するプログラムは、停止してしまいます。
→ Shell::Exec (VBS)
対策
RunProg "batch1.bat", ""
バッチファイルを実行するときは、次のようにしてください。
（pause など、標準入力するコマンドを使わないようにしてください）
カレント・ディレクトリを調整してから RunProg を呼び出してください。
→ T_Call\TryExec.vbs
実証コード
→ input (vbslib)
RunProg "batch1.bat /close", ""
閉じないバッチファイルは、閉じるようにする
→ コマンドプロンプトを自動的に閉じないバッチファイル
参考
→ エラー発生時の動作
→ 正常終了時の動作
g_ChildHead
Dim g_ChildHead as string
新プロセスが標準出力へ出力する内容を表示するときに、行頭に追加する文字列。
デフォルトは、何も追加しません。
グローバル変数です。
→ CheckTestErrLevel
VBScript をデバッガに接続するときは、下記のように //x を付けてください。
RunProg "cscript //x sample.vbs", ""
関連
→ RunProg (clib)
テスト
→ T_DebugVBS_Manual.vbs
関連
→ sudo （管理者として起動）
→ 子プロセスへの受け渡し (/ChildProcess オプション)
複数のコマンドをバッチファイルのように記述するときは
→ RunBat
RunProg したプロセスAが、子プロセスBを生成したとき、プロセスAが終了しても、プロセスB
が終了していなければ、RunProg から戻りません。
start "cmd.exe /C ""batch1.bat"""
g_VBS_Lib.NotEchoStartCommand
を指定したときは、RunProg 自体の echo 出力は
しなくなりますが、RunProg から実行するプログラムは、echo 出力されます。
EchoOff オブジェクト
を使っても出力しなくなりますが、ファイルに保存できます。
一般的なシェルと異なり、リダイレクトしても標準出力へも出力されます。
cmdline 引数に指定した実行ファイルやスクリプトファイルがあるフォルダーではありません。
→ T_RunProg.vbs
補足
→ Run (Shell)
→ TempParams.txt - C言語のプログラムにデータを渡す
→ g_start_in_path
→ RunBat
入力が要求されていないのに止まるとき
新しいウィンドウが開き、標準入力ができます
→ Run (Shell)
→ Exec (Shell)
ダブル クォーテーションを指定するときは、\' を指定してください。
RunProg "cscript sample.vbs \'/Option\'", ""
sample.vbs に、名前なし引数（オプション以外）である、/Option という文字列が
渡ります。
→ GetWScriptArgumentsUnnamed
→ ArgsLog
出力内容をテストするときは、
→ AssertFC
→ ログ
SysWOW64\cscript.exe から cscript （cscript のフォルダー指定なし）を RunProg したときは、
SysWOW64\cscript.exe が起動します。
Run (Shell)
から cscript を起動したときは、system32\cscript.exe (64bit版) が起動します。
←
↓