(for Internet Explorer)
ファイルを作成するときに
【引数】
IsEnabled
SafeFileUpdate を実行するかどうか
Function  new_IsSafeFileUpdateStack( IsEnabled as boolean ) as IsSafeFileUpdateStack
を実行します。
返り値のオブジェクトが削除されたら、指定は無効になります。
(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
(src)
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
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
Sub  WriteVBSLibFooter( OutFileStream as TextStream, Opt as WriteVBSLibFooter_Option )
【引数】
OutFileStream
開いている書き込むファイル
WriteVBSLibFooter_Option
Class  WriteVBSLibFooter_Option
  Public  CommandPromptMode
End Class
Opt
オプション or Empty
… Empty でないなら g_CommandPrompt の値を変更します
(src)
現在実行している、メイン.vbs ファイルの中にある --- start of vbslib include --- 以降を
OutFileStream に出力します。
--- start of vbslib include --- が Main 関数より前にあるときは、何もしません。
を出力します。 (メイン.vbs ファイルの最後にするとき)
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 関数より後にあるときは、何もしません。
を出力します。 (メイン.vbs ファイルの最初にするとき)
    Set  file = OpenForReplace( "file1.html", Empty )
    file.Replace  "<TopOfContexts/>", "<TopOfContexts/>"+vbCRLF+ "new Topic"
    file = Empty
Function  OpenForReplace( SrcPath as string, DstPath as string ) as ReplaceTextFile1
テキストファイルの内容を変更します。
【引数】
SrcPath
DstPath
変更前のテキストファイルのパス
変更後のテキストファイルのパス。 SrcPath と同じ、または Empty 可。
返り値
ランダムアクセスに対応しています。 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 # T_OpenForReplace
テスト
関連
TopOfContexts タグの後ろに new Topic を追加する
Value の設定値を 0 から 1 に変える
変更する内容は、返り値のメソッドに指定します。
タグに囲まれた複数行を変更する
上と同じ内容の短縮形
OpenForReplace( "file1.txt", Empty ).Replace  "Value = 0", "Value = 1"
file1.txt
Value = 0
Value = 1
→ vbslib.vbs
ソース
サンプル
サンプル
サンプル
サンプル
補足
(src)
テキストを置き換えます。
テキストファイルの内容の変更を完了します。
サンプル
指定のタグで囲まれたテキストを置き換えます。
取得
テキストを置き換えます。
指定のタグで囲まれたテキストを置き換えます。
編集中のファイルの内容。
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
サンプル
関連
Sub  ReplaceTextFile1::Replace( FromText as string, ToText as string )
テキストを置き換えます。
【引数】
FromText
ToText
置き換える前のテキスト
置き換えた後のテキスト
(src)
置き換えた後のテキストが存在するときは、置き換えを行いません。
これは、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 を追加する
テスト
→ T_Replace.vbs
T_OpenForReplaceCharSet
T_OpenForReplace
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
関連
(src)
置き換える範囲は、複数行であってもかまいません。
T_OpenForReplaceRange
デストラクタから自動的に呼ばれますが、明示的に呼び出すこともできます。
Sub  ReplaceTextFile1::Close()
テキストファイルの内容の変更を完了します。
SafeFileUpdateEx
Sub  SafeFileUpdateEx( FromTmpFilePath as string, ToFilePath as string, Option_ as string )
ファイルを安全に更新します。 上書き移動します。
【引数】
FromTmpFilePath
ToFilePath
新しい内容が書かれたファイルのパス
更新するファイルのパス
Option_
Empty、または、g_VBS_Lib.ToTrashBox
SafeFileUpdate を呼び出している途中で、ファイルの更新やバックアップなどに失敗
したら、エラーが発生しますが、ファイルの内容は、消えることなく、元に戻ります。
ただし、新しい内容は保存できていないので、エラー復帰して、別のディスクに保存
できるようにしてください。
サンプル
tmp_path = GetTempPath( "new_*.txt" )
CreateFile  tmp_path, "新情報!"
SafeFileUpdateEx  tmp_path, "FileA.txt", Empty
FileA.txt の内容を、"新情報!" という内容に更新します。
一時的に存在するファイル tmp_path に、新しい内容を出力する必要があります。
SafeFileUpdate を呼び出した後は、tmp_path の場所にファイルは無くなります。
"FileA.txt"
"新情報!"
更新するファイルを直接開いてライトするプログラムの場合、ライトしている途中で、
容量不足になったり、接続できなくなったりしてエラーになると、更新する前の内容
が消えてしまいます。 それだけでなく、更新した後の内容も保存できない可能性が
あります。 その場合、ファイルに格納していた情報がすべて消えてしまいます。
SafeFileUpdate は、そのリスクを回避します。
→ vbslib.vbs
ソース
Option_ = g_VBS_Lib.ToTrashBox を指定すると、
と同じ動きになります。
テスト
→ T_SafeCopy.vbs # [T_SafeFileUpdate]
Sub  SafeFileUpdate( FromTmpFilePath as string, ToFilePath as string )
ファイルを安全に更新します。 上書き移動して、元の内容はゴミ箱に入ります。
【引数】
FromTmpFilePath
ToFilePath
新しい内容が書かれたファイルのパス
更新するファイルのパス
テスト
→ T_SafeCopy.vbs # [T_SafeFileUpdate]
関連
→ vbslib.vbs
ソース
Sub  ConvertToFullPath( SrcFilePath as string, DstFilePath as string )
%FullPath(..\SampleLib)%
テキストファイルの中の相対パスや特殊フォルダのパスをフル・パスに変換してコピーします。
変換前
変換後の例
C:\folder\SampleLib
%DesktopPath%
C:\Documents and Settings\user1\デスクトップ
【引数】
SrcFilePath
DstFilePath
変換前のファイルのパス
変換後のファイルのパス(新規作成または上書き), Empty不可
(src)
%FullPath(x)% の x に相対パスを記述すると、DstFilePath のファイルが入ったフォルダを相対
パスの基準にしたフル・パスに変換されます。 基準を SrcFilePath ではなく DstFilePath にして
いる理由は、1つの SrcFilePath のファイルに対して、複数の場所で使用することができるよう
にするためです。

% を使った環境変数も展開されます。
→ 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( )% などの % % で囲まれた部分を置き換えます。
ソース
→ ToolsLib.vbs
テスト
→ T_fc.vbs
T_ReplaceStringTemplate
Sub  ReplaceStringTemplate( FolderPath as string, RegularExpressionPart as string,
    BeforeTemplate as string, AfterTemplate as string, Opt as Empty )
テキストファイルの中をキーワードで検索し、テンプレートを置き換えます。
【引数】
FolderPath
RegularExpressionPart
検索対象フォルダーやワイルドカード
BeforeTemplate
置き換える前のテンプレート(複数行可)
Opt
Empty を指定してください
置き換える前のキーワード。複数行不可
置き換えた後のテンプレート(複数行可)
AfterTemplate
関連
→ PartRep
テンプレートの中に次の予約変数を記述することができます。
${FileName}
ファイル名に置き換わります
置き換えた後のテンプレートにある変数が、置き換える前のテンプレートにないときは、
変数のまま残ります。 ただし、Opt 引数に dictionary 型を指定して、変数に一致する
キーに対応した値に置き換えることもできます。
@param   ${Arguments}
@return  ${RerutnValue}
サンプル
関数名: ${FunctionName}
引数:   ${Arguments}
返り値: ${RerutnValue}
補足:   ${Note}
BeforeTemplate
AfterTemplate
のように指定した場合、FolderPath にマッチしたあるファイルの内容は、次のように変化します。
@param   First Parameter
@return  None
関数名: ${FunctionName}
引数:   First Parameter
返り値: None
補足:   
予約変数
RegularExpressionPart 引数に指定するキーワードは、BeforeTemplate に含まれるキーワード
を指定します。 AfterTemplate に含まれていなくても構いません。
ただし、Opt 引数に次のように指定したものとします。
Dict(Array( "${Note}", "" ))
→ Execute (GrepClass)
→ Samples\ReplaceTemplate フォルダー
→ SyncFilesMenuLib.vbs
サンプル
ソース
Function  new_ReplaceTemplateClass( path_of_XML as string ) as ReplaceTemplateClass
テキストファイルのテンプレートを操作するアプリケーションのオブジェクトを生成します。
【引数】
xml_path
テンプレートに関するの設定ファイルのパス
テンプレートを操作するアプリケーション
返り値
path_of_XML に指定したファイルの内容については、サンプルを参照してください。
テキストファイルのテンプレートを操作するアプリケーションのオブジェクトは、次のメソッドを持ちます。
合っていない(古い)テンプレートの場所を表示します
合っていない(古い)テンプレートの中の場所を表示します
テンプレートを置き換えます
XML ファイルの説明は、サンプルの XML ファイルの中にあります。
→ SyncFilesMenuLib.vbs
ソース
Sub  ReplaceTemplateClass::EchoOld()
現在使われているテンプレートと合っていない(古い)テンプレートの場所を表示します。
以下の場所にあるテンプレートがマッチしませんでした。
Template_getDifference コマンドで、違いがある場所の行番号を調べられます。
-------------------------------------------------------------------------------
Target\a.txt(2)
Target\a.txt(13)
-------------------------------------------------------------------------------
サンプル
表示内容
関連
→ SyncFilesMenuLib.vbs
ソース
Sub  ReplaceTemplateClass::RunGetDifference()
現在使われているテンプレートと合っていない(古い)テンプレートの中の場所を表示します。
Enterのみ:"Target\a.txt"
調べるファイルのパス >
以下の場所にあるテンプレートがマッチしませんでした。
-------------------------------------------------------------------------------
Target\a.txt(5)
-------------------------------------------------------------------------------
サンプル
表示内容
調べる対象のファイルの入力を要求されます。
関連
→ SyncFilesMenuLib.vbs
ソース
Sub  ReplaceTemplateClass::RunReplace()
テンプレートを置き換えます。
以下の場所にあるファイルの中にあるテンプレートを置き換えます
編集するフォルダー = Target
ReplaceTemplateID_From = #Template1_Old
ReplaceTemplateID_To = #Template1
続行するには Enter キーを押してください . . .
-------------------------------------------------------------------------------
>ReplaceStringTemplate  "Target", "\* Function:"
Target\a.txt
サンプル
表示内容
実行するかどうかの確認を要求されます。
関連
    Set rep = StartReplace( "a.txt", GetTempPath("*.txt"), False )
    Do Until rep.r.AtEndOfStream
        SplitLineAndCRLF  rep.r.ReadLine(), line, cr_lf
        line = Replace( line, "Value=0", "Value=1" )
        rep.w.WriteLine  line + cr_lf
    Loop
    rep.Finish
(src)
Function  StartReplace( SrcPath as string, TmpDstPath as string, IsDstWillBeExist as boolean )
             as StartReplaceObj
ファイルの一部を行単位で置き換える準備をします。
【引数】
SrcPath
TmpDstPath
置き換えようとするファイル
一時ファイルのパス、または置き換えた後のパス
TmpDstPath が置き換えた後のパスかどうか
IsDstWillBeExist
StartReplace を呼び出すと、SrcPath と TmpDstPath のファイルを開きます。
返り値を使って、ファイルにアクセスできます。(下記サンプルを参照)
返り値
コンテキスト
関連
→ T_Replace.vbs # [T_StartReplace]
テスト
改行文字コードは、SrcPath に記述されているものが、そのまま継承されます。 ただし、
が使える環境である必要があります。 (通常、使えます)
また、rep.r 「以外」のファイルから rep.w にライトするときは、リードするファイルを開くときに、
new_TextFileLineSeparatorStack( get_ADODBConsts().Keep ) が必要です。
改行文字コードについて
ReadLine で取得できる行の末尾には、vbCRLF または vbLF が付きます。
その他のサンプル
IsDstWillBeExist に g_VBS_Lib.DstIsBackUp を指定すると、TmpDstPath にバックアップを作成し、
SrcPath 置き換えた後の内容が入ります。
IsDstWillBeExist = False のときは、返り値の Finish メソッドを呼び出すと、全てのファイルを閉じ、
TmpDstPath から SrcPath へ、ファイルコピーを行い、TmpDstPath を削除します。
WriteLine で行を出力するときは、ReadLine で取得した改行文字を付けてください。
を使えば、改行文字を分けることができます。
関連
→ FindStringLines