(for Internet Explorer)
Function  IsMatchedWithWildcard( Path, WildCard ) as boolean
ワイルドカードにマッチするかどうかを返します。
【引数】
ワイルドカード
WildCard
検査する文字列
Path
WildCard で指定できるワイルドカードは、先頭に * だけです。
WildCard に * が無い文字列も指定できます。
(src)
サンプル
Assert  IsMatchedWithWildcard( "a.bmp", "*.bmp" ) = True
Assert  IsMatchedWithWildcard( "a.bmp", "*.jpg" ) = False
Path がワイルドカードにマッチしたかどうか
返り値
Sub  RemoveWildcardMatchedArrayItems( in_out_PathArray as array of string, WildCard as string )
ワイルドカードにマッチしたパスを配列から除きます。
【引数】
ワイルドカードを含むファイルまたはフォルダの名前
WildCard
(入出力) パスが入った文字列の配列
in_out_PathArray
WildCard で指定できるワイルドカードは、先頭に * だけです。
WildCard に * が無い文字列も指定できます。
(src)
サンプル
arr = Array( "a.jpg", "b.bmp", "c.jpg" )
RemoveWildcardMatchedArrayItems  arr, "*.jpg"
Assert  IsSameArray( arr, Array( "b.bmp" ) )
Sub  RemoveWildcard( WildCard as string, fnames as array of string )
(src)
廃止予定です
代わり
→ T_Wildcard.vbs # [T_ReplaceFileNameWildcard]
Assert  ReplaceFileNameWildcard( "Fo\File.txt", "Fo\*.txt", "Fo\*.ini" ) = "Fo\File.ini"
Function  ReplaceFileNameWildcard( Path as string, FromStr as string, ToStr as string )
ワイルドカードを使って、ファイルパスを変更します。
【引数】
Path
FromStr
ファイルパス(ワイルドカードは使えません)
変更前の文字列。ワイルドカード可能。
ToStr
変更後の文字列。ワイルドカード可能。 "" 可能。
ファイル:
vbslib.lib
サンプル
変更後のファイルパス。 Empty=Path が FromStr にマッチしなかった
返り値
(src)
テスト
Path に親フォルダー名が含まれるときは、FromStr, ToStr にも親フォルダー名を含めてください。
s= ReplaceFileNameWildcard( Fo\File.txt", "Fo\*.txt", "Fo\*.xml"  '// OK
s= ReplaceFileNameWildcard( Fo\File.txt", "*.txt", "*.xml"        '// NG
Path が、FromStr にマッチしなかったときは、Empty が返ります。
関連
→ StrMatchKey クラス
ワイルドカードにマッチするかどうか
count = GetReadOnlyList( "C:\Folder", read_onlys, Empty )
For Each step_path  In read_onlys.Keys
    is_read_only = read_onlys( step_path )  '// step_path="FileA.txt", ...
Next
Function  GetReadOnlyList( TargetPath as string,
    out_ReadOnlyDictionary as dictionary of boolean,  Opt as Empty ) as integer
フォルダーにあるすべてのファイルのファイル読み取り属性を取得します。
【引数】
TargetPath
out_ReadOnlyDictionary
調べるフォルダー、またはファイルのパス
(出力) ファイル読み取り属性の辞書、キーは相対パス、Empty可
Opt
Empty を指定してください
テスト
サンプル
ソース
読み取り属性がオンであるファイルの数
返り値
→ T_File.vbs
T_GetReadOnlyList
→ ToolsLib.vbs
フォルダー自体の 読み取り属性は取得できません。
サンプル
count = GetReadOnlyList( "C:\Folder\FileA.txt", read_onlys, Empty )
For Each step_path  In read_onlys.Keys
    is_read_only = read_onlys( step_path )  '// step_path="."
Next
TargetPath 引数にフォルダーを指定した場合
TargetPath 引数にファイルを指定した場合
サブ・フォルダー・オブジェクトを高速に辞書に列挙します。 サブフォルダのサブフォルダも列挙します。
【引数】
Opt
FolderPath
Empty を指定してください
調べるフォルダのパス。 このフォルダの中から列挙します
Sub  EnumFolderObjectDic( FolderPath as string, Opt as Empty, out_Folders as dictinoary of Folder )
(出力) サブフォルダを含む Folder オブジェクトの辞書
out_Folders
out_Folders には、FolderPath の Folder オブジェクトと、FolderPath のサブフォルダーの Folder オブジェクト
の両方が含まれます。 FolderPath に相当するキーの値は "." です。
out_Folders は辞書型です。 キーは、フォルダーへの相対パスです。 その基準フォルダーは、FolderPath
です。 アイテムは、Folder オブジェクトです。
  EnumFolderObjectDic  "C:\FolderA", Empty, folders1  '// [out] folders1
  EnumFolderObjectDic  "C:\FolderB", Empty, folders2  '// [out] folders2
  For Each step_path  In folders1.Keys
    If not folders2.Exists( step_path ) Then
      mkdir  "C:\FolderB\"+ step_path
      For Each file  In folders1.Item( step_path ).Files
        copy  "C:\FolderA\"+ step_path + file.Name,  "C:\FolderB\"+ step_path
      Next
    End If
  Next
サンプル
(src)
EnumFolderObjectDic
EnumFolderObjectDic
関連
出力例
"."
"fe"
"fo1"
"fo1\fo1"
"fo1\fo11.ex"
"fo1\t1"
"fo2"
テスト
→ T_Wildcard.vbs # [T_EnumFolderObjectDic]
(src)
フォルダの中のファイル・オブジェクトを高速に辞書に列挙します。
【引数】
out_Files
FolderOrPath
(出力) ファイルのオブジェクトの辞書
調べるフォルダのパス。 または、Folder オブジェクト(高速)
Sub  EnumFileObjectDic( FolderOrPath as string or Folder, out_Files as dictinoary of File
out_Files は辞書型です。 キーは、ファイル名です。 アイテムは、File オブジェクトです。
サブ・フォルダーにあるファイルは列挙しません。
  Dim  files1, files2, file_name

  EnumFileObjectDic  "C:\FolderA", files1  '// [out] files1
  EnumFileObjectDic  "C:\FolderB", files2  '// [out] files2
  For Each file_name  In files1.Keys
    If not files2.Exists( file_name ) Then
      copy  "C:\FolderA\"+ file_name,  "C:\FolderB"
    End If
  Next
サンプル
EnumFileObjectDic
EnumFileObjectDic
関連
Sub  EnumFolderObject( FolderPath as string, out_Folders as array of Folder )
サブフォルダのオブジェクトを高速に列挙します。 サブフォルダのサブフォルダも列挙します。
【引数】
out_Folders
FolderPath
(出力) サブフォルダのオブジェクトの配列
調べるフォルダのパス。 このフォルダの中から列挙します
(src)
  Set fname_key = new StrMatchKey
  fname_key.Keyword = LCase( "*.txt" )

  EnumFolderObject  "C:\FolderA", folders  '// [out] folders
  For Each fo  In folders  '// fo as Folder
    For Each fi  In fo.Files '// fo as File
      If fname_key.IsMatch( fi.Name ) Then
        echo  fi.DateLastModified
      End If
    Next
  Next
関連
out_Folders には、FolderPath の Folder オブジェクトと、FolderPath のサブフォルダーの Folder
オブジェクトの両方が含まれます。
サンプル
EnumFolderObject
サブ・フォルダーを列挙しない場合
性能
サンプル
    EnumFolderObject  "C:\FolderA", folders  '// [out] folders
    For Each folder  In folders  '// folder as Folder Object
        For Each file  In folder.Files '// file as File Object
            echo  file.Path
        Next
    Next
EnumFolderObject
Sub  GetSubFolders( folders as array of string, path as string )
サブ フォルダーのパスを列挙します。 サブ フォルダーのサブ フォルダーも列挙します。
【引数】
folders
path
(出力) サブ フォルダーのパスの配列
調べるフォルダーのパス。 このフォルダーの中から列挙します
関連
(src)
行頭の空白文字をタブ文字に変換します
テスト
→ T_ChangeTabSpace フォルダ
行頭のタブ文字を空白文字に変換します
行頭以外の空白文字をタブ文字に変換します
行頭以外のタブ文字を空白文字に変換します
Sub  ChangeHeadSpaceToTab( ReadStream as TextStream, WriteStream as TextStream,
                           TabSize as integer )
行頭の空白文字をタブ文字に変換します。
【引数】
ReadStream
WriteStream
変換前のテキスト・ファイル・ストリーム
変換後のテキスト・ファイル・ストリーム
TabSize
1つのタブ文字あたりの空白文字の数
ToolsLib.vbs (src)
Sub  ChangeHeadTabToSpace( ReadStream as TextStream, WriteStream as TextStream,
                           TabSize as integer )
行頭のタブ文字を空白文字に変換します。
【引数】
ReadStream
WriteStream
変換前のテキスト・ファイル・ストリーム
変換後のテキスト・ファイル・ストリーム
TabSize
1つのタブ文字あたりの空白文字の数
ToolsLib.vbs (src)
サンプル
Set rep = StartReplace( "in\sample.c", "out\sample.c", True )
ChangeHeadTabToSpace  rep.r,  rep.w,  4
rep.Finish
Sub  ChangeMiddleSpaceToTab( ReadStream as TextStream, WriteStream as TextStream,
                             TabSize as integer )
行頭以外の空白文字をタブ文字に変換します。
【引数】
ReadStream
WriteStream
変換前のテキスト・ファイル・ストリーム
変換後のテキスト・ファイル・ストリーム
TabSize
1つのタブ文字あたりの空白文字の数
ToolsLib.vbs (src)
Sub  ChangeMiddleTabToSpace( ReadStream as TextStream, WriteStream as TextStream,
                             TabSize as integer )
行頭以外のタブ文字を空白文字に変換します。
【引数】
ReadStream
WriteStream
変換前のテキスト・ファイル・ストリーム
変換後のテキスト・ファイル・ストリーム
TabSize
1つのタブ文字あたりの空白文字の数
ToolsLib.vbs (src)
Sub  SetBreakByFName( FName as string )
指定した名前のファイルをライトするときにブレークさせます。
【引数】
FName
ブレークするファイル名(フォルダパス指定不可)
g_debug ≧ 1 のときだけブレークします。
vbslib の関数(copy、del、OpenForWrite など)ではない(g_fs.CopyFile など)関数によって
ライトしたときはブレークしません。
(src)
→ T_Debug フォルダ
テスト
サンプル:
SetBreakByFName  "Out.txt"  '//[TODO]
関連
(src)
Function  IsWriteAccessDenied( ErrNumber as integer, Path as string,
                            FolderOrFile as bitfield, in_out_nRetry as integer )
負荷が高いときに発生する書き込み拒否エラーに対処します。
【引数】
ErrNumber
チェックするエラーコード
返り値
書き込み拒否エラーが発生したかどうか
<WARNING msg="書き込みできません。" msg2="再試行しています" retry_count="1"
 path="C:\folder\file.txt"/>
VBScript (Windows) では、ファイルがロックされたときだけでなく、ディスク・アクセスの負荷が
高くなると、書き込み拒否エラー(エラーコード 70)が発生します。 このエラーに対処しないと、
スクリプトによる自動実行が中断されてしまいます。 IsWriteAccessDenied は、書き込み拒否
エラーによってスクリプトが中断されないように、再試行するスクリプトの記述を補助します。
コマンドプロンプト(cscript.exe)で動く vbslib で、書き込み拒否エラーが発生したら、
次の警告を表示して、グローバル変数 g_FileSystemRetryMSec に指定した時間(ミリ秒)
(通常4秒)だけ Sleep します。 グローバル変数 g_FileSystemMaxRetryMSec に指定した
時間(ミリ秒)(通常60秒)だけ再試行したら、書き込み拒否エラーを発生させます。
再試行は、IsWriteAccessDenied の内部では行いません。 参考:下記サンプル。
ウィンドウ(wscript.exe)で動く vbslib で、書き込み拒否エラーが発生したら、次の警告を
表示して [ 再試行 ] か [ キャンセル ] を選ぶメッセージボックスが表示されます。
ユーザーが入力するまで自動実行は一時停止します。
書き込みできません。
  [再試行] [キャンセル]
アクセスしたパス
(入出力) 再試行回数
Path
in_out_nRetry
  Dim  f, path, n_retry, en, ed

  n_retry = 0
  Do
    On Error Resume Next
      Set f = g_fs.CreateTextFile( path )
    en = Err.Number : ed = Err.Description : On Error GoTo 0
    If not IsWriteAccessDenied( en, path, F_File, n_retry ) Then  Exit Do
  Loop
  If en <> 0 Then  Err.Raise en,,ed
サンプル: 高負荷状態でも使える CreateTextFile
path
path
再試行ユーザーインターフェース
→ E_WriteAccessDenied
参考
FolderOrFile
F_File または F_Folder または F_File or F_Folder
テスト
→ T_Replace_target.vbs # T_FromLock
→ T_Copy.vbs # T_CopyLocked
→ T_File.vbs # T_OverwriteFolderFile
キーワード:
書き込み拒否エラー(エラーコード 70)が発生する可能性があるものの例
g_fs.CopyFile, g_fs.CopyFolder, g_fs.MoveFile, g_fs.MoveFolder
g_fs.DeleteFolder, g_fs.CreateFolder
g_fs.CreateTextFile, g_fs.OpenTextFile
File::Name への代入による改名, ADODBStream::SaveToFile
vbslib が提供するファイル操作機能は、書き込み拒否エラーが発生しないように対処されて
いるため、IsWriteAccessDenied を呼び出す必要はありません。
→ T_File_w_Manually.vbs
→ T_File_c_Manually.vbs
バイナリー・ファイルのデータを扱いやすくするクラスです。
ファイルを配列のように扱うことができます。
関連
    Set bin = new BinaryArray
    bin.Size = 4
    bin(0) = &hFF  '// low  byte of BOM
    bin(1) = &hFE  '// high byte of BOM
    bin(2) = &h80  '// low  byte of hiragana mu
    bin(3) = &h30  '// high byte of hiragana mu
    bin.Save  "unicode_sample.txt"
サンプル
バイナリーファイルへライト。 Unicode 形式のテキストファイル 「む(=0x3080)」 を作る
    Set bin = ReadBinaryFile( "unicode_sample.txt" )
    If bin(0) = &hFF  and  bin(1) = &hFE Then
        echo  "This is unicode file."
    End If
バイナリーファイルからリード。Unicode 形式のテキストファイルかどうか判定する
メンバー
    Set bin = new BinaryArray
    bin.Load  "unicode_sample.txt"
    strbin = bin.Read( Empty, Empty )
    strbin = LeftB( strbin, 2 ) + ChrB( &h6F ) + ChrB( &h30 ) + MidB( strbin, 3 )
    bin.Write  strbin, 0, Empty
    bin.Save  "unicode_sample.txt"
LeftB, MidB, RightB, LenB, AscB, ChrB は、文字列操作関数のバイナリ版です。
ファイル:
System.vbs
配列の要素。 配列番号。 (デフォルト・プロパティ)
.Load
.Save
.Read
.Write
.ToEmpty
.ReDim_
.UBound_
配列の要素数。 バイト・サイズ
配列の要素数。 バイト・サイズ
配列の要素数。 バイト・サイズ
配列の要素数を変更します。 ReDim Preserve と同じです。
ファイルの内容を、配列に入力します。
配列の内容を、ファイルに出力します。
配列の内容の一部を、Byte 配列にして返します。
配列の内容の一部を、変更します。
配列を空にします。 配列要素数は 0 になります。
配列の最大要素番号を返します。
配列のすべての要素を文字列にします。
テスト
→ T_Binary フォルダ
(src)
配列の内容の一部を、構造化した辞書を取得します。
構造化した配列を使って、バイナリ配列の内容の一部にライトします。
    Dim  bin, out, size
    bin.Write  &h10, Empty, Array( &h12, &h34, &h56, &h78, &h9A, &hBC, &hDE )
    size = bin.ReadStruct( &h10, out, Array( "a", vbByte,  "b", vbInteger+vbArray, 3 ) )
    '// out("a")    = &h12
    '// out("b")(0) = &h5634
    '// out("b")(1) = &h9A78
    '// out("b")(2) = &hDEBC
バイナリーファイルを構造化してリードする
.Read
.Write
.Save
.Load
.Write
.Save
.WriteFromBinaryArray
配列の内容の一部をコピーします。
    Set bin = new_BinaryArray( Array( &h42, &h4D ) )
バイナリーデータを作成する
  Set bin = new_BinaryArray( Array( &h42, &h4D ) )
Function  new_BinaryArray( IntegerArray as array of integer ) as BinaryArray
バイナリ配列を生成します。
【引数】
IntegerArray
バイナリーの内容
返り値
生成されたバイナリ配列
関連
サンプル
ソース
→ System.vbs
Function  new_BinaryArrayFromFile( Path as string ) as BinaryArray
バイナリ・ファイルからバイナリ配列を生成します。
【引数】
Path
バイナリ・ファイルのパス
返り値
生成されたバイナリ配列
ソース
→ System.vbs
関連
  Set bin = new_BinaryArrayFromBase64( "EjRWeA==" )
Function  new_BinaryArrayFromBase64( Base64_Text as string ) as BinaryArray
Base64 でエンコードされた文字列からバイナリ配列を生成します。
【引数】
Base64_Text
Base64 でエンコードされた文字列
返り値
生成されたバイナリ配列
サンプル
ソース
→ System.vbs
テスト
→ T_Binary.vbs
Test_of_Base64
関連
  Set bin = new_BinaryArrayAsText( "漢字", "EUC-JP" )
Function  new_BinaryArrayAsText( Text as string, CharacterSet as string ) as BinaryArray
文字列から指定した文字コードセットのバイナリ・データを持つバイナリ配列を生成します。
【引数】
Text
文字列
CharacterSet
文字コードセット、Empty を指定すると "Unicode"
サンプル
ソース
→ System.vbs
テスト
→ T_Binary.vbs
T_Binary_TextCharacterSet
関連
生成されたバイナリ配列
返り値
文字コードセット一覧
EUC-JP 形式の文字列が格納されたバイナリ配列を生成します。
サンプル
文字列の中のすべての文字コード(Unicode)を表示します。
echo  new_BinaryArrayAsText( "漢字", Empty ).xml
文字列が異なっていたら Diff ツールを開きます
Default Property  BinaryArray::Item( i as integer ) as integer
配列番号を使って、バイナリ配列の要素を参照します。 (デフォルト・プロパティ)
【引数】
i
配列の要素の番号。 先頭は 0
Dim  bin : Set bin = new BinaryArray
bin.Load  "a.bin"
echo  bin(0) '// bin.Item(0) と同じ
bin(0) = &h30
サンプル
bin(0)
bin(0)
(src)
1バイトずつアクセスします。