(for Internet Explorer)
← ▼ ▲
↑
new_IsSafeFileUpdateStack
ファイルを作成するときに
【引数】
IsEnabled
SafeFileUpdate を実行するかどうか
Function new_IsSafeFileUpdateStack( IsEnabled as boolean ) as IsSafeFileUpdateStack
を実行します。
SafeFileUpdate
返り値のオブジェクトが削除されたら、指定は無効になります。
(src)
Dim sf : Set sf = new_IsSafeFileUpdateStack( True )
CreateFile "File1.txt", "abc"
サンプル
テスト
→ T_File.vbs [T_CreateFile]
← ▼ ▲
g_FileOptions
g_FileOptions = new FileOptionsClass
Class FileOptionsClass
Public Property Get CharSet '// as lower case string. ADODB.Stream.Charset
Public Property Get CharSetEx '// as Empty, c.UTF_8_No_BOM
Public Property Get LineSeparator '// as ADODBConsts.Keep
Public Property Get IsSafeFileUpdate '// as boolean
End Class
→ new_TextFileCharSetStack
→ new_IsSafeFileUpdateStack
(src)
← ▼ ▲
WriteVBS_Comment
Sub WriteVBS_Comment( Path as string, StartTag as string, EndTag as string,
Text as string, Opt as Empty )
VBScript のファイルの中のコメントに、複数行の文字列を書き込みます。
【引数】
Path
StartTag
VBScript ファイルのパス、Empty =
VBScript ファイルの中の、書き込みを開始する1つ上の行にあるキーワード
EndTag
Opt
書き込む最後の行の1つ下の行にあるキーワード
Empty を指定してください
StartTag と EndTag に指定したキーワードがヒットしないよう、下記のサンプルにあるように + でつなぐ
などの対策をしてください。
テスト
→ T_FileInScript.vbs
T_WriteVBS_Comment
ソース
→ vbslib.vbs
WScript.ScriptFullName
Text
書き込む文字列。 先頭に ' は不要です
サンプル
WriteVBS_Comment Empty, "["+"FileA.txt]", "[/"+"FileA.txt]", _
"abc" +vbCRLF+_
"DEF" +vbCRLF, Empty
'-------------------------------------------------------------------[FileA.txt]
'((( これはテキストファイルの代わりです )))
'
'END
'------------------------------------------------------------------[/FileA.txt]
スクリプト（実行前）
スクリプト（実行後）
WriteVBS_Comment Empty, "["+"FileA.txt]", "[/"+"FileA.txt]", _
"abc" +vbCRLF+_
"DEF" +vbCRLF, Empty
'-------------------------------------------------------------------[FileA.txt]
'abc
'DEF
'------------------------------------------------------------------[/FileA.txt]
abc
DEF
関連
→ ReadVBS_Comment
← ▼ ▲
WriteVBSLibFooter
Sub WriteVBSLibFooter( OutFileStream as TextStream, Opt as WriteVBSLibFooter_Option )
【引数】
OutFileStream
開いている書き込むファイル
WriteVBSLibFooter_Option
Class WriteVBSLibFooter_Option
Public CommandPromptMode '// as integer
End Class
Opt
オプション or Empty
… Empty でないなら g_CommandPrompt の値を変更します
(src)
現在実行している、メイン.vbs ファイルの中にある --- start of vbslib include --- 以降を
OutFileStream に出力します。
--- start of vbslib include --- が Main 関数より前にあるときは、何もしません。
vbslib include
を出力します。 （メイン.vbs ファイルの最後にするとき）
関連
→ WriteVBSLibHeader
CommandPromptMode
WriteVBSLibFooter file, Empty
サンプル
← ▼ ▲
WriteVBSLibHeader
Sub WriteVBSLibHeader( OutFileStream as TextStream, Opt as WriteVBSLibHeader_Option )
【引数】
OutFileStream
開いている書き込むファイル
WriteVBSLibHeader_Option
Class WriteVBSLibHeader_Option
Public m_OverCommandPrompt
End Class
Opt
オプション or Empty
… Empty でないなら g_CommandPrompt の値を変更します
(src)
現在実行している、メイン.vbs ファイルの中にある --- end of vbslib include --- まで（先頭から）を
OutFileStream に出力します。
--- start of vbslib include --- が Main 関数より後にあるときは、何もしません。
vbslib include
を出力します。 （メイン.vbs ファイルの最初にするとき）
← ▼ ▲
Set file = OpenForReplace( "file1.html", Empty )
file.Replace "<TopOfContexts/>", "<TopOfContexts/>"+vbCRLF+ "new Topic"
file = Empty
OpenForReplace
Function OpenForReplace( SrcPath as string, DstPath as string ) as ReplaceTextFile1
テキストファイルの内容を変更します。
【引数】
SrcPath
DstPath
変更前のテキストファイルのパス
変更後のテキストファイルのパス。 SrcPath と同じ、または Empty 可。
返り値
→ ReplaceTextFile1 クラス
ランダムアクセスに対応しています。 OpenForRead や OpenForWrite のようにシーケンシャル
（ファイルの先頭から順番）にアクセスする必要はなく、ReplaceTextFile1::Replace などを
任意の順番で呼び出すことができます。
Set file = OpenForReplace( "file1.txt", Empty )
file.Replace "Value = 0", "Value = 1"
file = Empty
DstPath を Empty にすると、DstPath = SrcPath にした時と同じ動きをします。
file1.txt
Value = 0
Value = 1
→ T_Replace.vbs
テスト
関連
→ OpenForReplaceXML
TopOfContexts タグの後ろに new Topic を追加する
Value の設定値を 0 から 1 に変える
変更する内容は、返り値のメソッドに指定します。
→ ReplaceTextFile1 クラス
タグに囲まれた複数行を変更する
→ ReplaceRange (ReplaceTextFile1)
→ ReadFile
→ Replace
→ CreateFile
上と同じ内容の短縮形
OpenForReplace( "file1.txt", Empty ).Replace "Value = 0", "Value = 1"
file1.txt
Value = 0
Value = 1
→ ReplaceSymbols コマンド
→ StringReplaceSetClass
ソース
サンプル
サンプル
サンプル
サンプル
補足
→ StartReplace
→ vbslib.vbs
サンプル
文字列を編集することでテキストファイルの内容を変更する
Set file = OpenForReplace( "file1.txt", Empty )
file.Text = Replace( file.Text, "Value = 0", "Value = 1" )
file = Empty
Value = 0
Value = 1
file1.txt
Text
変更前が Unicode 形式ファイルのときは、変更後も Unicode 形式ファイルになります。
→ Switches コマンド
→ Translate コマンド
T_OpenForReplace
返り値のオブジェクトが削除されるタイミングでエラーが発生中（Err.Number <> 0 or
g_Err2.Number <> 0） のときは、ファイルを作成または更新しません。
重要なファイルを上書き更新するときは、OpenForReplace の DstPath 引数に一時的に
出力するパスを指定し、その一時ファイルを作成した後（ファイルを閉じた後）で、
SafeFileUpdateEx
を呼び出してください。 ただし、内部で２〜３回のファイルコピーを行います。
→ SafeFileUpdateEx
重要なファイルを上書き更新するとき
行単位でファイルの一部を置き換える
← ▼ ▲
ReplaceTextFile1 クラス
.Replace
(src)
テキストを置き換えます。
テキストファイルの内容の変更を完了します。
.Close
→ OpenForReplace
サンプル
.ReplaceRange
指定のタグで囲まれたテキストを置き換えます。
取得
→ OpenForReplace
テキストを置き換えます。
指定のタグで囲まれたテキストを置き換えます。
.Text
編集中のファイルの内容。
← ▼ ▲
Text (ReplaceTextFile1) (OpenForReplace)
Dim ReplaceTextFile1::Text as string
編集中のファイルの内容。
この内容を直接変更することで、ファイルの内容を変更することができます。
テスト
→ T_Replace.vbs
T_OpenForReplaceText
Set rep = OpenForReplace( "file1.txt", Empty )
rep.Text = Replace( rep.Text, "from", "to" )
rep = Empty
サンプル
→ FindStringLines
関連
→ Replace (RegExp)
← ▼ ▲
Replace (ReplaceTextFile1)
Sub ReplaceTextFile1::Replace( FromText as string, ToText as string )
テキストを置き換えます。
【引数】
FromText
ToText
置き換える前のテキスト、または VBScript.RegExp
置き換えた後のテキスト
置き換えた後のテキストが存在するときは、置き換えを行いません。
これは、VBS の Replace 関数と結果が異なりますが、追加的な置き換えをしたときに、多重的に
追加されることがなくなります。
例：
f.Replace "a = 0", "a = 0 : b = 0"
置き換える前
置き換えた後
a = 0
a = 0 : b = 0
a = 0 : b = 0
a = 0 : b = 0
… [a = 0 : b = 0 : b = 0] にはなりません
a = 0 の後に b = 0 を追加する
[ 親: ReplaceTextFile1 クラス ]
テスト
→ T_Replace.vbs
T_OpenForReplaceCharSet
T_OpenForReplace
→ vbslib.vbs
ソース
VBScript.RegExp
を FromText 引数に指定すると、パターンマッチングにより置き換え対象を
検索します。 ToText は、
RegExp::Replace
と同様に、$1 などを指定することもできます。
T_OpenForReplaceRegExp
例：
OpenForReplace( "file1.txt", Empty ).Replace new_RegExp( "from.*", False ), "to"
new_RegExp
OpenForReplace
← ▼ ▲
ReplaceRange (ReplaceTextFile1)
Sub ReplaceTextFile1::ReplaceRange( StartOfFromText as string, EndOfFromText as string,
ToText as string )
指定のタグで囲まれたテキストを置き換えます。
【引数】
StartOfFromText
EndOfFromText
置き換える前のテキストが始まる場所にあるタグ（テキスト）
置き換える前のテキストが終わる場所にあるタグ（テキスト）
置き換えた後のテキスト。 通常、タグも含む。
ToText
置き換えサンプル
StartOfFromText = "<Tag>", EndOfFromText = "</Tag>" とします。
ToText
置き換える前
置き換えた後
abc<Tag>123</Tag>def
<Tag>456</Tag>
abc<Tag>456</Tag>def
abc<Tag>123</Tag>def
456
abc456def
<Tag>
123
456
</Tag>
<Tag>
789
</Tag>
<Tag>
789
</Tag>
サンプル
Set file = OpenForReplace( "file1.html", Empty )
file.ReplaceRange "<NewTopic>", "</NewTopic>", _
"<NewTopic>"+vbCRLF+ "new Topic" +vbCRLF+"</NewTopic>"
file = Empty
テスト
→ T_Replace.vbs
→ ReadFileInTag
関連
置き換える範囲は、複数行であってもかまいません。
[ 親: ReplaceTextFile1 クラス ]
T_OpenForReplaceRange
→ vbslib.vbs
ソース
← ▼ ▲
Close (ReplaceTextFile1)
デストラクタから自動的に呼ばれますが、明示的に呼び出すこともできます。
Sub ReplaceTextFile1::Close()
テキストファイルの内容の変更を完了します。
→ ReplaceTextFile1 クラス
← ▼ ▲
IsSaveInTerminate (ReplaceTextFile1)
→ ReplaceTextFile1 クラス
Dim ReplaceTextFile1::IsSaveInTerminate as boolean or Empty
オブジェクトが削除されるタイミングで保存するかどうか。
Empty のときは、エラーが発生している状態でなければ保存します。
← ▼ ▲
temporary_path = "FileA.txt.updating"
CreateFile temporary_path, "新情報！"
SafeFileUpdateEx temporary_path, "FileA.txt", Empty
SafeFileUpdateEx
Sub SafeFileUpdateEx( TemporaryFilePath as string, ToFilePath as string, Option_ as string )
ファイルを安全に更新します。 上書き移動します。
【引数】
TemporaryFilePath
ToFilePath
新しい内容が書かれた削除する一時ファイルのパス
更新するファイルのパス
Option_
Empty、または、g_VBS_Lib.ToTrashBox
SafeFileUpdate を呼び出している途中で、ファイルの更新やバックアップなどに失敗
したら、エラーが発生しますが、ファイルの内容は、消えることなく、元に戻ります。
ただし、新しい内容は保存できていないので、エラー復帰して、別のディスクに保存
できるようにしてください。
サンプル
FileA.txt の内容を、"新情報！" という内容に更新します。
一時的に存在するファイル temporary_path に、新しい内容を出力する必要があります。
SafeFileUpdateEx を呼び出した後は、temporary_path の場所にファイルは無くなります。
更新するファイルを直接開いてライトするプログラムの場合、ライトしている途中で、
容量不足になったり、接続できなくなったりしてエラーになると、更新する前の内容
が消えてしまいます。 それだけでなく、更新した後の内容も保存できない可能性が
あります。 その場合、ファイルに格納していた情報がすべて消えてしまいます。
SafeFileUpdate は、そのリスクを回避します。
→ vbslib.vbs
ソース
Option_ = g_VBS_Lib.ToTrashBox を指定すると、
SafeFileUpdate
と同じ動きになります。
テスト
→ T_SafeCopy.vbs
また、一時的に存在するファイル（一時ファイル）のパスは、出力するファイルのパスの最後に
updating という拡張子を追加したパスに標準化すれば、ファイルの上書き保存に失敗した
という状況が推測しやすくなります。 また、拡張子を変更することで、不完全なファイルを
アプリケーションに渡さないようになります。
AppKeyClass::NewWritable
を使う必要がなくなります。
"新情報！"
"FileA.txt"
T_SafeFileUpdate
拡張子 .updating
→ 拡張子 .updating
新しい内容を書くファイルの拡張子を .updating にすると、
SafeFileUpdateEx path +".updating", path, Empty
例：
内部でファイルのコピーを２〜３回行います。
← ▼ ▲
SafeFileUpdate
Sub SafeFileUpdate( FromTmpFilePath as string, ToFilePath as string )
ファイルを安全に更新します。 上書き移動して、元の内容はゴミ箱に入ります。
【引数】
FromTmpFilePath
ToFilePath
新しい内容が書かれたファイルのパス
更新するファイルのパス
テスト
→ T_SafeCopy.vbs # [T_SafeFileUpdate]
関連
→ new_IsSafeFileUpdateStack
→ vbslib.vbs
ソース
→ SafeFileUpdateEx
← ▼ ▲
ConvertToFullPath
Sub ConvertToFullPath( SrcFilePath as string, DstFilePath as string )
%FullPath(..\SampleLib)%
テキストファイルの中の相対パスや特殊フォルダのパスをフル・パスに変換してコピーします。
変換前
変換後の例
C:\folder\SampleLib
%DesktopPath%
C:\Documents and Settings\user1\デスクトップ
【引数】
SrcFilePath
DstFilePath
変換前のファイルのパス
変換後のファイルのパス（新規作成または上書き）, Empty不可
(src)
DstFilePath 引数が指すファイルが入ったフォルダーを、相対パスの基準にしたフル・
パスに変換します。
基準を SrcFilePath ではなく DstFilePath にしている理由は、１つのテンプレート的な
ファイル(SrcFilePath) に対して、複数の場所(DstFilePath) で使用することができるように
するためです。
→ TextFileConvertFormat::Set_
参考
テスト
Unicode ファイルにするときは、次のように設定してから ConvertToFullPath を呼んでください。
Dim c : Set c = g_VBS_Lib
Dim cs : Set cs = new_TextFileCharSetStack( c.Unicode )
ConvertToFullPath "ans.txt", "ans_tmp.txt"
%FullPath(.)%
C:\folder\current
→ T_ConvAbs.vbs # ConvertToFullPath
→ % を使った変換式
参考
テキストファイルの中に書かれた %FullPath( )% などの % % で囲まれた部分を置き換えます。
(*1)
(*1)
(*1)
← ▼ ▲
% を使った文字列変換関数
%FullPath(..\SampleLib)%
変換前の例
変換後の例
C:\folder\SampleLib
%DesktopPath%
C:\Documents and Settings\user1\デスクトップ
vbslib の提供するいくつかの関数の中で、% を使った文字列変換関数が使えます。
% を使った環境変数も展開されます。
%FullPath(.)%
C:\folder\current
ConvertToFullPath
IsSameTextFile
の c.RightHasPercentFunction
(*1)
(*2)
(*1)
(*2)
○
○
×
○
○
○
○
○
%RegExp(.*)%
正規表現にマッチする任意の文字列
比較対象も指定する関数で使えるかどうか。
例：
例：
比較対象を指定しない関数で使えるかどうか。
サンプル
ABC
***%FullPath(.)%***
***%RegExp(.*)%***
ABC
***C:\FolderA***
***01234567879***
展開
%MultiLine%
×
○
複数行にマッチする (*4)
(*4)
関数一覧
%MultiLine% は、任意の複数行とマッチします。
また、%MultiLine% の直後にテキスト（%を使った関数可能）を置くと、その複数行が
マッチするかどうかをチェックします。
start
%MultiLine%
end
start
Line1
Line2
Line3
end
展開
展開
start
C:\FolderA>
C:\FolderA>
C:\FolderA>
end
start
%MultiLine%%FullPath(.)%>
end
AssertFC
関連
→ URL にプレースホルダーを含める
→ sscanf
キーワード：
%FullPath(.)%, %RegExp(.*)%, %MultiLine%, %DesktopPath%
→ 正規表現
%Env(USERPROFILE)%
○
○
環境変数 USERPROFILE の値
→ ${ } 変数, LazyDictionaryClass
%FullPath(x)% の x に相対パスを指定したときの基準フォルダーは、%FullPath(x)% を
記述したファイルがあるフォルダーです。
(*3)
(*3)
→ ConvertToFullPath
→ ConvertToFullPath
← ▼ ▲
ParsePercentVariableString
ParsePercentVariableString "abc %VAR1%, %VAR2% def", sub_strings, variables
Assert IsSameArray( sub_strings, Array( "abc ", ", ", " def" ) )
Assert IsSameArray( variables, Array( "%VAR1%", "%VAR2%" ) )
Sub ParsePercentVariableString( the_String as string, out_SubStringArray as array of string,
out_VariableArray as array of string )
文字列の中の % を使った変数の部分とそれ以外の部分に分割します。
【引数】
the_String
out_SubStringArray
分割する前の文字列
変数以外の部分の配列
out_VariableArray
変数の部分の配列
サンプル
ソース
関連
→ ScanFromTemplate
→ ToolsLib.vbs
→ T_Str.vbs
テスト
T_ParseDollarVariableString
→ ParseDollarVariableString
← ▼ ▲
ReplaceStringTemplate
ソース
→ ToolsLib.vbs
テスト
→ T_fc.vbs
T_ReplaceStringTemplate
Sub ReplaceStringTemplate( FolderPath as string, RegularExpressionPart as string,
TemplateBefore as string, TemplateAfter as string, Opt as Empty )
テキストファイルの中をキーワードで検索し、テンプレートを置き換えます。
【引数】
FolderPath
RegularExpressionPart
検索対象フォルダーやワイルドカード
TemplateBefore
置き換える前のテンプレート（複数行可）
Opt
オプション、または、Empty
置き換える前のキーワード。複数行不可
→ 正規表現
置き換えた後のテンプレート（複数行可）
TemplateAfter
関連
→ PartRep
→ SearchStringTemplate
テンプレートの中に次の予約変数を記述することができます。
${FileName}
ファイル名に置き換わります
置き換えた後のテンプレートにある変数が、置き換える前のテンプレートにないときは、
変数のまま残ります。 ただし、Opt 引数に dictionary 型を指定して、変数に一致する
キーに対応した値に置き換えることもできます。
@param ${Arguments}
@return ${RerutnValue}
サンプル
関数名： ${FunctionName}
引数： ${Arguments}
返り値： ${RerutnValue}
補足： ${Note}
TemplateBefore
TemplateAfter
のように指定した場合、FolderPath にマッチしたあるファイルの内容は、次のように変化します。
@param First Parameter
@return None
関数名： ${FunctionName}
引数： First Parameter
返り値： None
補足：
予約変数
RegularExpressionPart 引数に指定するキーワードは、TemplateBefore に含まれるキーワードを
正規表現で指定します。 キーワードは、TemplateAfter に含まれていなくても構いません。
この引数を使って内部で高速なファイル検索が行われます。
"" を指定すると、すべてのファイルに対して置き換えを試みます。
ただし、Opt 引数に次のように指定したものとします。
Dict(Array( "${Note}", "" ))
Dict
→ GetLineNumOfTemplateDifference
→ Execute (GrepClass)
→ RunReplace (ReplaceTemplateClass)
→ Replace
→ ${ } 変数, LazyDictionaryClass
TemplateBefore に指定した変数（${ … } の部分）は、TemplateAfter に指定した ${ … } の
部分に入ります。
Opt 引数には、Empty か、辞書型で変数のデフォルト値を指定できます。 TemplateBefore に
ない変数が TemplateAfter にあるときは、その変数をここで指定した値に置き換えます。
以上のテンプレートは、XML ファイルに記述することができます。
→ new_ReplaceTemplateClass
テンプレートのサンプル
←
↓