←
▼
▲
Function RIFF_Reader::ReadStruct( out_Dic as dictionary,
FormatArray as integer ) as integer
現在位置のチャンクの内容をリードし、辞書に格納します。
【引数】
(出力) チャンクの内容が入った辞書
out_Dic
返り値
抽出した部分のバイナリの大きさ(バイト)
バイナリ配列から抽出する部分の型の集合
FormatArray
参考
←
▼
▲
Function RIFF_Reader::ReturnToParent() as RIFF_ChunkClass
現在位置を親チャンクに移動します。
【引数】
返り値
親チャンクに関する情報
←
▼
▲
.Offset
.FourCC
チャンクのヘッダーをリードして得られたチャンクに関する情報。
.Size
.IsExistChild
.IsExistNextSibling
チャンクの先頭の位置。 0 が先頭
チャンクの名前に相当する FourCC (4文字の文字列)
チャンクに入っているデータのサイズ(バイト)
子チャンクがあるかどうか
次の兄弟チャンクがあるかどうか
←
▼
▲
→ RIFF 形式
WAV, AVI などの形式の一部にあたる、ツリー構造を持ったチャンクによって構成される
バイナリーデータ形式を作成します。
参考
Set w_=AppKey.NewWritable( "." ).Enable()
Set bin = OpenForWriteRIFF( "riff.bin", "Root" )
bin.WriteLIST "Set "
bin.WriteChunk "Elem"
bin.WriteStruct Array( vbByte, Array( &h41, &h42, &h43 ) )
bin.WriteStruct Array( vbInteger, Array( &h4544 ) )
bin.WriteEnd '// End of "Elem" chunk
bin.WriteEnd '// End of "Set " chunk
bin.WriteChunk "Elm2"
bin.WriteStruct Array( vbByte, Array( &h58, &h59, &h5A ) )
bin = Empty
サンプル
RIFF( 'Root'
LIST( 'Set '
'Elem'( &h41, &h42, &h43, &h44, &h45 )
)
'Elm2'( &h58, &h59, &h5A )
)
52 49 46 46 2A 00 00 00 52 6F 6F 74
4C 49 53 54 12 00 00 00 53 65 74 20
45 6C 65 6D 05 00 00 00 41 42 43 44 45 00
45 6C 6D 32 03 00 00 00 58 59 5A 00
RIFF 0x0000002A Root
LIST 0x00000012 Set
Elem 0x00000005 0x41 0x42 0x43 0x44 0x45
Elm2 0x00000003 0x58, 0x59, 0x5A
上記のスクリプトは、以下のバイナリーファイルを作ります。
Function OpenForWriteRIFF( in_Path as string, in_RootFourCC as string ) as RIFF_Writer
RIFF 形式バイナリーファイルのライトを開始します。
【引数】
出力ファイルのパス
in_Path
in_RootFourCC
ルートチャンクの名前に相当する FourCC (4文字の文字列)
返り値
内容をライトするときに使うオブジェクト
テスト
→ System.vbs
ソース
→ T_Binary.vbs
←
▼
▲
Sub RIFF_Writer::WriteLIST( in_FourCC as string )
リスト チャンクのヘッダーを出力します。
【引数】
in_FourCC
出力するリスト チャンクの名前に相当する FourCC (4文字の文字列)
次は、
リストを終了するときは、
WriteEnd
を呼び出してください。
WriteLIST
か
のどちらかのチャンクのヘッダーをライトします。
←
▼
▲
Sub RIFF_Writer::WriteLIST( in_FourCC as string )
リスト以外のチャンクのヘッダーを出力します。
【引数】
in_FourCC
出力するチャンクの名前に相当する FourCC (4文字の文字列)
次は、
でライトします。
←
▼
▲
Sub RIFF_Writer::WriteStruct( FormatAndDataArray as array )
構造化した配列を使って、現在のチャンクに、バイナリーデータをライトします。
【引数】
連続して WriteStruct を呼び出すと、同じチャンクの中の続きをライトします。
バイナリ配列へライトする部分の型とライトする値の集合
FormatAndDataArray
参考
でチャンク(のサイズ)を確定します。
←
▼
▲
Sub RIFF_Writer::WriteEnd()
チャンクのサイズを確定します。 現在のチャンクのライトを終了したときに呼び出します。
または
でライトしたチャンクのヘッダーの一部にある
サイズ情報の部分に、適切な値をライトします。
か
のどちらかを呼び出したときは、
WriteEnd を呼び出す前のチャンクの親の兄弟のチャンクがライトされます。
本関数を呼び出した後で、
本関数は、
ルートのチャンクになるまで、WriteEnd を呼び出す必要はありません。 RIFF_Writer クラス
のオブジェクトが削除されるタイミングで、足りなかった WriteEnd 呼び出しを内部で自動
的に行い、OpenForWriteRIFF 関数の引数に指定したファイルに出力します。
←
▼
▲
Sub RIFF_Writer::WritePadding( in_FourCC as string, in_Alignment as integer )
次のバイナリーデータのアラインメントを揃えるために、パディングするチャンクをライトします。
【引数】
in_FourCC
in_Alignment
パディングをするチャンクの FourCC
アラインメント
→ チャンクの中のデータの先頭をアラインメントするには
参考
:
'Pad ' FourCC ... ライトする範囲の最初
padding_size
padding ... ライトする範囲の最後
'Data' FourCC ... WritaStruct 関数でライト
data_size
data ... アラインメントが揃う位置
下記の data のアラインメントを揃えるために、下記の 'Pad ' チャンクをライトします。
←
▼
▲
テスト
ソース
→ T_LeafPath.vbs
T_FileHashCache
→ ToolsLib.vbs
ファイルのハッシュ値(MD5)のキャッシュ。
キーはフル パス、アイテムはハッシュ値(リード オンリー)である辞書。
プロセス起動後、初めて指定されたファイルのときだけ、ハッシュ値を計算します。
大量のファイルを何度も比較するときに使うと、高速になります。
Assert g_FileHashCache( "C:\A.txt" ) = "9060587edeb01a63e3d3edc959678d1e"
参考
g_FileHashCache に入るオブジェクトは、ToolsLib.vbs を include するときに作成されます。
キーがフォルダーのパスのときのアイテムは、"Folder" です。
ただし、フォルダーが空のときは、"EmptyFolder" です。
キーがファイルやフォルダーのパスではないときのアイテムは、"" です。
ファイルの変更があったときは、Remove メソッド、RemoveAll メソッドでキャッシュを破棄してください。
g_FileHashCache.RemoveAll
g_FileHashCache.CopyRenFile "Source.txt", "Destination.txt"
ハッシュ値の計算と、ファイルのコピーを同時にするときは、CopyRenFile を呼び出します。
ファイルの削除と同時に、キャッシュを更新するときは、DeleteFile を呼び出します。
g_FileHashCache.DeleteFile "File.txt"
g_FileHashCache.Remove "File.txt"
←
▼
▲
ダウンロード
txt2bintxt.exe は、VBScript で、一部がバイナリになっているテキストファイルを
作成できるようにする変換ツールです。
f.WriteLine "123"
f.WriteLine Chr(&hFF)+"EF BB BF 0D 0A"
f.WriteLine "123"
バイナリになっている行は、行頭に Chr(&hFF) を出力してください。
31 32 33 0D 0A
EF BB BF 0D 0A
31 32 33 0D 0A
こうして出力したファイルを、in.txt として、
txt2bintxt.exe in.txt out.txt
を実行すると、out.txt は次のようになります。
out.txt (バイナリ表現)
out.txt (テキスト表現)
123
・ソ
123
EF BB BF 0D 0A
EF BB BF 0D 0A
・ソ
EF BB BF は、UTF-8 の BOM です。
→ txt2bintxt.zip
不要になった入力ファイル(in.txt) は、別途削除してください。
関連
BOM 付きテキストファイル
バイナリ・ファイル・アクセス
←
▼
▲
Sub Txt2BinTxt( SrcPath as string, DstPath as string )
(src)
参考
←
▼
▲
Function get_ADODBConsts() as ADODBConsts
ADODB モジュールの定数をメンバーに持つオブジェクトを返します。
ADODBConsts が定義する定数
サンプル
Dim c : Set c = get_ADODBConsts()
t = f.Read( c.adReadAll )
(src)
バイト配列を作成する関数
バイト配列と整数の間で変換する関数
関連
ファイル:
System.vbs
←
▼
▲
Function ADODBConsts::ConvertToByteArray( ByteArray as variant,
Offset as integer, Size as integer ) as array of Byte
文字列や配列や数値を、バイト配列に変換します。
【引数】
ByteArray
Offset
文字列、または配列、または数値
返り値の先頭となる ByteArray の中の位置。先頭=0
Size
ByteArray の中から返り値にするサイズ(バイト)。最後まで=-1
ファイル:
System.vbs
返り値
に渡せる
サンプル
Dim binary, stream
Dim c : Set c = get_ADODBConsts()
binary = c.ConvertToByteArray( ChrB( &h42 ) + ChrB( &h4D ), 0, Empty )
stream.Write binary
binary = c.ConvertToByteArray( &h4D, 1, Empty )
(src)
→ T_Binary フォルダ
テスト
参考
←
▼
▲
Function ADODBConsts::ConvertToStructuredByteArray( FormatAndDataArray as array ) as array of Byte
構造化した配列を、バイト配列に変換します。
【引数】
FormatAndDataArray
バイナリ配列へライトする部分の型とライトする値の集合
返り値
に渡せる
(src)
→ T_Binary フォルダ
テスト
参考
構造化した配列、FormatAndDataArray 引数の説明
←
▼
▲
Function ADODBConsts::BytesToShortInt( b0, b1, b2, b3 as integer ) as integer
2バイトのバイナリ・データを、-32768(&h8000)〜32767(&h7FFF) の整数に変換します。
サンプル
c.BytesToShortInt( &hFE, &hFF ) = &hFFFE
(src)
←
▼
▲
Function ADODBConsts::BytesToUShortIntToLongInt( b0, b1, b2, b3 as integer ) as integer
2バイトのバイナリ・データを、0〜65535 の整数に変換します。
サンプル
c.BytesToUShortIntToLongInt( &hFE, &hFF ) = 65534
(src)
←
▼
▲
Function ADODBConsts::BytesToLongInt( b0, b1, b2, b3 as integer ) as integer
4バイトのバイナリ・データを、Long 型整数に変換します。
サンプル
c.BytesToLongInt( &h78, &h56, &h34, &h12 ) = &h12345678
(src)
c.BytesToLongInt( AscB( b ), AscB( MidB( b, 2, 1 ) ), _
AscB( MidB( b, 3, 1 ) ), AscB( RightB( b, 1 ) ) )
←
▼
▲
Function ADODBConsts::ShortIntToBytes( Value as integer ) as array of integer
-32768(&h8000)〜32767(&h7FFF) の整数を、2バイトの配列に変換します。
サンプル
c.ShortIntToBytes( &hFEFF ) = Array( &hFF, &hFE )
&h0000〜&h7FFF(Integer型)、&h10000〜 &h7FFFFFFF(Long型) は、正の整数です。
&h8000〜&hFFFF(Integer型)、&h80000000〜(Long型) は、負の整数です。
(src)
←
▼
▲
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"
サンプル
関連
改行文字は、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
←
▼
▲
→ セクション化されたソースファイル (Module Mixer)
関連
→ 構造化テキストフォーマット
セクション化されたテキストを集めた文字列を返します
セクション化されたテキストを編集します
複数のセクションに分けたテキストファイルを扱います。
セクション化されたテキストを集めてファイルを作成します
←
▼
▲
Sub CreateFromTextSections( in_XML_Path as string, in_XML_Root as IXMLDOMElement,
in_CreateFilePath as string, in_MixedTextXPath as string, in_Empty as Empty )
【引数】
in_XML_Path
in_XML_Root
TextSection タグがある XML ファイルのパス
Empty、または、in_XML_Path の XML の要素オブジェクト
in_CreateFilePath
作成するファイルのパス
in_MixedTextXPath
セクション化されたテキストを集めてファイルを作成します。
返り値
Empty、または、オプション(下記)
in_Empty
セクション化されたテキストを集めたテキスト
下記の MixedText タグがある XML 要素の XPath、基準は in_XML_Root
参考
テキスト、MixedText タグのサンプル
in_XML_Root の中にある
は、TextSection タグの path 属性に指定できます。
サンプル
CreateFile タグに指定されたすべてのファイルを作成する。
CreateFromTextSections "SettingA.xml", Empty, Empty, Empty, Empty
in_XML_Root に Empty を指定すると、内部で
( in_XML_Path, Empty ) を呼び出します。 その分、
CreateFile タグに指定されたすべてのファイルを作成する。
サンプル
CreateFromTextSections "SettingA.xml", Empty, "_out.txt", "#C_Type", Empty
テスト
→ T_TextSection.vbs
T_CreateFromTextSections
ソース
→ ToolsLib.vbs
関連
CreateFromTextSections "SettingA.xml", Empty, "_out.txt", "/MixedText[@id='C_Type']", Empty
処理時間がかかります。
in_Empty に get_ToolsLibConsts().DeleteIfNoSection を指定すると、MixedText タグの中の TextSection タグ
が1つも無いときに、in_CreateFilePath のファイルが削除されます。
←
▼
▲
Function ReadTextSections( in_XML_Root as IXMLDOMElement,
in_MixedTextXPath as string, in_VariablesForPath as string,
in_Variables as LazyDictionaryClass, in_Empty as Empty )
【引数】
in_XML_Root
in_MixedTextXPath
in_MixedSettingXPath の基準となる XML要素(タグ)
下記の MixedText タグがある XML 要素の XPath、基準は in_XML_Root
in_XML_FilePath
アドレスの基準となる XML ファイルのパス
in_VariablesForPath
セクション化されたテキストを集めた文字列を返します。
返り値
Empty を指定してください
in_Empty
セクション化されたテキストを集めたテキスト
Empty または path 属性に評価するときに使う辞書
参考
テスト
→ T_TextSection.vbs
T_ReadTextSections
ソース
→ ToolsLib.vbs
<File mixed_text="SettingA.xml#mixed_1"/>
サンプル
SettingB.xml
<MixedText id="mixed_1">
<TextSection path="File.c#First"/>
<TextSection path="File.c#Second"/>
</MixedText>
SettingA.xml
VBScript
Set linker = new LinkedXMLs
linker.XmlTagNamesHavingIdName = Array( "MixedText" )
xml_path = "SettingB.xml"
Set xml_root = LoadXML( xml_path, Empty )
linker.StartNavigation xml_path, xml_root
Set mixed_text_tag = linker.GetLinkTargetNode( xml_root.getAttribute( "mixed_text" ) )
text = ReadTextSections( mixed_text_tag, ".", linker.TargetXmlPath, Empty, Empty )
linker.EndNavigation
"SettingB.xml"
"mixed_text"
mixed_text
SettingB.xml の XML 属性から参照する MixedText タグからセクションを集める。
ReadTextSections
関連
テキストのサンプル
in_XML_Root の中にある
と、in_VariablesForPath 引数の変数は、TextSection タグの path
属性に指定できます。
VBScript
xml_path = "SettingB.xml"
Set xml_root = LoadXML( xml_path, Empty )
text = ReadTextSections( xml_root, "/MixedText[@id='mixed_1']", xml_path, Empty, Empty )
ReadTextSections