(for Internet Explorer)
Function  ADODBConsts::LongIntToUShortIntToBytes( Value as integer ) as array of integer
0〜65535 の整数を、2バイトの配列に変換します。
サンプル
c.LongIntToUShortIntToBytes( 65534 ) = Array( &hFE, &hFF )
(src)
Function  ADODBConsts::LongIntToBytes( Value as integer ) as array of integer
整数を、4バイトの配列に変換します。
サンプル
c.LongIntToBytes( &h12345678 ) = Array( &h78, &h56, &h34, &h12 )
(src)
ADODB.Stream 関連
→ vbslib.vbs
Sub  ADODB_Stream_loadFromFile( Stream as ADODB.Stream, Path as string )
エラーメッセージを適切にした ADODB.Stream.LoadFromFile 。
テスト
ソース
参考
→ T_fc.vbs
T_IsSameBinaryFile_ReadWriteLock
複数行からなる文字列のうち、それぞれの行を要素とした配列を返します。
Function  ArrayFromLines( lines as string ) as Array of string
For Each line  In ArrayFromLines( "ABC"+ vbCRLF +"DEF" )
Next
【引数】
lines
返り値
複数行からなる文字列
それぞれの行を要素とした配列
上記 ArrayFromLines の返り値は、Array( "ABC", "DEF" )
"ABC"+ vbCRLF +"DEF"
サンプル
関連
→ StringStream クラス
改行文字は、CR+LF でも LF でもどちらでも構いません。
a_array = ArrayFromLines( Trim2( root.selectSingleNode( _
    "./Lines/text()" ).nodeValue ) )
サンプル
<Lines>
Line (1)
Line (2)
</Lines>
XML
VBScript
a_array は、Array( "Line (1)", "Line (2)" ) になります。
Lines
nodeValue
selectSingleNode
テスト
→ vbslib.vbs
ソース
→ T_Lines.vbs
セクション化されたテキスト
    Set file = OpenForWriteTextSection( "file.txt", Empty, Empty )
    file.Cut  "Section1"
    file = Empty
Function  OpenForWriteTextSection( SourcePath as string, DestinationPath as string,
    Option_ as Empty ) as WriteTextSectionClass
セクション化されたテキストの編集を開始します。
【引数】
SourcePath
DestinationPath
編集前のセクション化されたテキスト・ファイルのパス
編集した結果を出力するファイルのパス、または、Empty
Option_
Empty を指定してください
関連
テスト
サンプル
ソース
→ 構造化テキストフォーマット (Module Mixer)
→ ToolsLib.vbs
→ T_TextSection.vbs
返り値
返り値のオブジェクトの参照カウンターが 0 になったら、ファイルに出力されます。
セクション化されたテキスト
セクションを削除します。
file.txt ファイルの中の、"Section1" を含むセクションを削除します。
→ UsesSection (Mxp_Symbol)
残すセクションを選択します。
Sub  WriteTextSectionClass::Cut( Key as string )
セクションを削除します。
【引数】
Key
セクションの中に含まれる文字列
ソース
→ ToolsLib.vbs
Sub  WriteTextSectionClass::PickUp( Key as string )
残すセクションを選択します。
【引数】
Key
セクションの中に含まれる文字列
ソース
→ ToolsLib.vbs
本関数を1度でも呼び出すと、WriteTextSectionClass のオブジェクトの参照カウンターが 0
になったとき、選択されなかったセクションはすべて削除されます。
本関数を1度も呼び出さなかったときは、すべてのセクションが残ります。
関連
[SectionX]
SettingA = abc

SettingB = 12
; comment

[SectionY]
SettingA = BC
下記の形式のテキストファイルで記述された設定値を扱います。
行末までのコメント記号は、行頭のみ対応
空行も可能
セクション名は省略可能
Function  GetIniFileTextValue( IniText as string, SectionName as string,
    VariableName as string, Option_ as Empty ) as string
.ini ファイルに書かれた設定値を参照します。
【引数】
IniText
SectionName
変更前の .ini ファイルの内容
セクション名、セクションがないファイルでは=Empty
VariableName
変数名
関連
テスト
ソース
変数の設定値
返り値
Empty を指定してください
Option_
→ vbslib.vbs
→ T_IniFile.vbs
T_GetIniFileTextValue
Assert  GetIniFileTextValue( text, Empty, "NameA", Empty ) = "Value"
サンプル
該当する変数が存在しないときは、Empty が返ります。
after_text = SetIniFileTextValue( before_text, Empty, "NameA", "Value", Empty )
Function  SetIniFileTextValue( IniText as string, SectionName as string,
    VariableName as string, Value as Variant, Option_ as Empty ) as string
.ini ファイルに書かれた設定値を変更します。
【引数】
IniText
SectionName
変更前の .ini ファイルの内容
セクション名、セクションがないファイルでは=Empty
VariableName
変数名
サンプル
変更後の .ini ファイルの内容
返り値
Empty を指定してください
変更後の変数の設定値
Option_
Value
関連
テスト
ソース
→ vbslib.vbs
→ T_IniFile.vbs
T_SetIniFileTextValue
該当する変数が存在しないときは、エラーになります。
Sub  RenumberIniFileData( ReadStream as TextStream, WriteStream as TextStream,
    StartNumber as integer, IsPlusSpaceLineOnly as boolean )
.ini ファイルの内容のうち、= より左にある ( ) の中の番号を振り直します。
【引数】
ReadStream
入力ストリーム
WriteStream
出力ストリーム
開始番号
StartNumber
空行があるときだけ番号を+1するかどうか
IsPlusSpaceLineOnly
サンプル・データ
Data(2) = ABC
Data(5) = DEF
Data(6) = DEF
Data(1) = ABC
Data(2) = DEF
Data(3) = DEF
入力
出力
関連
ソース
→ vbslib.vbs
Function  ParseJSON( JSON_String as string ) as JS_Object
JSON をパース(構文解析)します。
【引数】
JSON_String
返り値
JSON 形式の文字列データ
JSON のデータにアクセスできるオブジェクト
Set json = ParseJSON( "{'attribute_1':'One', 'attr2':'Two'}" )
echo  json.attribute_1  '// "One"
サンプル
→ JSON (JavaScript Object Notation)
参考
(src)
省略された属性に対して、返り値から参照しようとすると、エラー 438 になります。
CSV 形式の1行を解析して、それぞれの項目を配列に格納します。
Function  ArrayFromCSV( a_CSV as string ) as Array of string
For Each column  In ArrayFromCSV( "ABC , DEF" )
Next
【引数】
a_CSV
返り値
CSV 形式の1行
(出力)CSV の項目が入った配列
関連
各項目の両端の空白が削除されたものが戻ります。
項目の端に空白文字がある場合と、項目の中にコンマやダブルクォーテーション(")が
あるときは、" " で囲んでください。 ただし、ダブルクォーテーション1文字あたり、
ダブルクォーテーションを2つ並べてください。
→ T_CSV.vbs # ArrayFromCSV
テスト
(src)
Function  ArrayFromCSV_Int( a_CSV as string ) as Array of integer
上記 ArrayFromCSV の返り値は、Array( "ABC", "DEF" )
ABC , DEF
A, "  ""ABC,"" "
A
  "ABC,"
CSV:
各項目:
VBS:
ArrayFromCSV( "A, ""  """"ABC,"""" """ )
CSV とは別に、VBS も同様に " 文字は " を2つ並べる
"A,  ,C" の真ん中の要素のように、何も無いときは、配列の要素が Empty になります。
"A, " のように最後がコンマのときは、配列の最後の要素が Empty になります
" " のように、空白文字や空文字列のときは、配列要素数が 0 になります。
ArrayFromCSV( "A,,C" ) = Array( "A", Empty, "C" )
ArrayFromCSV( "A," ) = Array( "A", Empty )
要素に "" (ダブルクオーテーション2つだけ)が指定されたときは、空文字列になります。
ArrayFromCSV( "A, """"" ) = Array( "A", "" )
ArrayFromCSV( " " ) = Array( )
複数行の文字列を指定するときは、最後の行以外の行末を "," にしてください。
ArrayFromCSV( "A, B," +vbCRLF+ "C, D," +vbCRLF+ "E, F" )
 = Array( "A","B","C","D","E","F" )
A, B,
C, D,
E, F
つまり
A, B, C, D, E, F
→ ArrayFromCmdLine
サンプル
→ AddCSV (ArrayClass)
性能について
本関数は処理が遅いです。
CSV ファイルのデータは、1行に対応するクラスの配列にキャッシュしておくと速くなります。
paths = ArrayFromCSV( Replace( Trim2( multi_line_string ), vbCRLF, "," ) )
サンプル
複数行の文字列から、各行を配列にする
Function  CSVFrom( a_Array as array ) as string
配列を CSV 形式に変換します。
【引数】
a_Array
返り値
配列
CSV 形式文字列
ソース
→ vbslib.vbs
Function  CSVText( s as string ) as string
CSV の1項目に変換します。
サンプル
s = CSVText( "a,b" )
s は、"""a,b""" という1つの値になります。
a と b という2つの値ではありません。
  s = ""
  For Each  t  In Array( "a", "b" )
    If s <> "" Then  s = s + ", "
    s = s + CSVText( t )
  Next
サンプル
CSV の1行を作成します
→ T_CSV.vbs
ソース
テスト
→ vbslib.vbs
CSV 形式の1項目を取り出し、通常の文字列に戻す。
Function  MeltCSV( Line as string, in_out_Start as integer ) as string
  i = 1
  Do
    s = MeltCSV( line, i )
    If not IsEmpty( s ) Then (s を使った処理)
    If i = 0 Then Exit Do
  Loop
【引数】
Line
in_out_Start
CSV 形式の1行
(入力) 取り出しを開始する文字の位置、(出力)次に取り出す〜
返り値
取り出した CSV 形式の1項目。Empty=項目に値が無い
サンプル
(src)
関連
各項目の両端の空白が削除されたものが戻ります。
次の項目が無いときは、i=0 になります。
i=0 を渡すと、Empty を返します。
→ T_CSV.vbs # main
テスト
→ T_CSV.vbs
ソース
Function  CSV_insert( CSV_Line as string, RightColumnNum0 as integer, Element as variant )
    as string
CSV 形式の1行に、要素を挿入します。
【引数】
CSV_Line
RightColumnNum0
CSV 形式の1行
挿入する位置の右の要素の番号(0以上)
テスト
→ vbslib.vbs
挿入した後の CSV 形式の1行
挿入する要素
Element
返り値
サンプル
Assert  CSV_insert( "A,B,C", 1, "x" ) = "A,x,B,C"
Assert  CSV_insert( "A,B,C", 4, "x" ) = "A,B,C,,x"
→ T_CSV.vbs
ソース
Function  CSV_set( CSV_Line as string, ColumnNum0 as integer, Element as variant )
    as string
CSV 形式の1つの要素を上書きします。
【引数】
CSV_Line
ColumnNum0
CSV 形式の1行
上書きする要素の番号(0以上)
テスト
→ vbslib.vbs
上書きした後の CSV 形式の1行
上書きする要素
Element
返り値
サンプル
Assert  CSV_set( "A,B,C", 1, "x" ) = "A,x,C"
Assert  CSV_set( "A,B,C", 4, "x" ) = "A,B,C,,x"
→ T_CSV.vbs
ソース
Function  CSV_remove( CSV_Line as string, ColumnNum0 as integer ) as string
CSV 形式の1つの要素を削除します。
【引数】
CSV_Line
ColumnNum0
CSV 形式の1行
削除する要素の番号(0以上)
テスト
→ vbslib.vbs
削除した後の CSV 形式の1行
返り値
サンプル
Assert  CSV_remove( "A,B,C", 1 ) = "A,C"
Assert  CSV_remove( "A,B,C", 4 ) = "A,B,C,"
Assert  CSV_remove( "A,B,C,", 3 ) = "A,B,C"
削除する要素より前の要素が無いときは、前に空の要素が追加されます
(src)
Function  LoadXML( PathOrStr as string, Opt as variant ) as IXMLDOMElement
XML ファイル、または XML 形式の文字列を読み込みます。
【引数】
PathOrStr
XML ファイルのパス、または XML 形式文字列
Opt
オプション(下記)
IXMLDOMElement
XML のルート要素
返り値
F_NoRoot フラグ
XML のルート要素が無い XML を読み込みます。 返り値は、内部で自動的に
加えられたルート要素 <Dummy_Root_> になります。
先頭が < でないときは、自動的にルート要素が加えられます。
F_Str フラグ
PathOrStr 引数を XML 形式文字列として処理します
サンプル: XML 形式文字列を展開する
    Dim  s : s = "ABC <TAG1 attr='value1'/> 123"
    Dim  root : Set root = LoadXML( s, F_NoRoot or F_Str )
    Dim  value : value = root.selectSingleNode( "./TAG1" ).getAttribute( "attr" )
    '//  value = "value1"
関連
LoadXML
    Dim  root, elem, attr

    Set root = LoadXML( "sample.xml", Empty )

    '//=== read 1 attribute value
    WScript.Echo  root.selectSingleNode( "./Tests/Test" ).getAttribute( "result" )

    '//=== read 1 text value
    WScript.Echo  root.selectSingleNode( "./Tests" ).text
    WScript.Echo  root.selectSingleNode( "./Tests/text()" ).nodeValue

    '//=== loop each tags
    For Each elem  In root.selectNodes( "./Tests/Test" )
        WScript.Echo  "result, "+ elem.getAttribute( "result" )
    Next

    '//=== loop each attributes
    For Each elem  In root.selectNodes( ".//Test" )
        WScript.Echo  "<" + elem.tagName + ">"
        For Each attr  In elem.attributes
            WScript.Echo  attr.name + "=" + attr.value
        Next
    Next
"sample.xml"
"./Tests/Test"
"./Tests/Test"
"result"
"result"
".//Test"
result
→ DOM サンプル
LoadXML
日本語があるときは、Unicode にするか、XML宣言で Shift-JIS を指定してください。
→ XmlFilter ツール (.zip)
テスト
→ T_XML フォルダー
サンプル: XML を結合する
    Dim  f, root, elem, attr

    Set f = OpenForWrite( "FileAB.xml", Empty )
    f.WriteLine  "<TabA>"
    Set root = LoadXML( "FileA.xml", Empty )
    f.WriteLine  XmlTags( root.selectSingleNode( "./TagB" ).xml, 1 )
    Set root = LoadXML( "FileB.xml", Empty )
    f.WriteLine  XmlTags( root.selectSingleNode( "./TagB" ).xml, 1 )
    f.WriteLine  "</TabA>"
→ XML
参考
./Tests/text()
関連
selectSingleNode
selectNodes
getAttribute
Function  LoadXML_Cached( PathOrStr as string, Opt as variant ) as IXMLDOMElement
IXMLDOMElement
XML を解析してできた DOM オブジェクトをキャッシュする
返り値がどの変数から参照されなくなっても、キャッシュのために、DOM オブジェクトはメモリー上に
残ります。 vbslib の内部に絶対パスをキー、DOM オブジェクトをアイテムとした辞書型のキャッシュ
があります。
ソース
→ vbslib.vbs
2回目以降の XML ファイルは、キャッシュによって XML を解析する処理がなくなり、高速に処理
します。
関連