(for Internet Explorer)
← ▼ ▲
↑
ReplaceTemplate.xml
/MultiText/Target
@path
処理対象のパス。複数可能。
→ FF-path 属性
処理対象のパス。 関連
/MultiText/EnabledTemplateIDs
現在使われている（変換後の）テンプレートのアドレス。
複数指定するときは、複数行記述してください。
@type
"Lines" を指定してください。
text()
/MultiText/ReplaceTemplateID_From
→ Samples\ReplaceTemplate フォルダー
サンプル
→ ReplaceStringTemplate
→ MultiTextXML_Class
${ } 変数、テキストファイルのテンプレート
new_ReplaceTemplateClass 関数
ReplaceTemplate タグを記述するファイルです。 ファイル名は、ReplaceTemplate.xml とは限りません。
ReplaceTemplate.xml は、
詳細
/MultiText/ReplaceTemplate
@before
@after
置き換える前のテキストがある Text タグの URL
置き換えた後のテキストがある Text タグの URL
/MultiText/Text
置き換える前または後のテンプレート
→ SetTargetPath
マージ設定ファイル
や
の
<?xml version="1.0" encoding="UTF-16"?>
<MultiText>
<ReplaceTemplate before="#Before" after="#After"/>
<Text id="Before"><![CDATA[
/* Function: ${FunctionName} */
]]></Text>
<Text id="After"><![CDATA[
/* Func: ${FunctionName} */
]]></Text>
</MultiText>
サンプル
/* Function: … */ を /* Func: … */ に置き換える設定
${ } 変数で置き換える前の内容を置き換えた後にコピーできます。
text()
→ CutIndentOfMultiLineText
インデント、改行コード
@id
@cut_indent
@indent
テンプレートに記述できる ---- 形式のコメント
→ MultiTextXML_Class
値の末尾が "_Keyword" のとき
→ EchoOld (ReplaceTemplateClass)
text()
置き換える前のテンプレートのアドレス。
→ RunReplace (ReplaceTemplateClass)
/MultiText/ReplaceTemplateID_To
→ RunReplace (ReplaceTemplateClass)
置き換えた後のテンプレートのアドレス。
text()
→ EchoOld (ReplaceTemplateClass)
→ RunReplace (ReplaceTemplateClass)
→ RunReplace (ReplaceTemplateClass)
← ▼ ▲
IsPause (ReplaceTemplateClass)
Dim ReplaceTemplateClass::IsPause as boolean
ユーザーへの確認を行うかどうか。
RunReplace メソッド
を呼び出したとき、置き換え内容を
たとえば、False に設定すると、
ユーザーに要求しなくなります。
← ▼ ▲
EchoOld (ReplaceTemplateClass)
→ SyncFilesMenuLib.vbs
ソース
Sub ReplaceTemplateClass::EchoOld()
現在使われているテンプレートと合っていない（古い）テンプレートの場所を表示します。
以下の場所にあるテキスト ファイルの一部がテンプレートがマッチしませんでした。
下記のパスの末尾にある番号は、テンプレートの中のキーワードがある行番号です。
vbslib Prompt.vbs の OpenByStepPath コマンドで開くことができます。
基準パス："C:\Folder"
GetDifference コマンドでテンプレートの中のマッチしなかった行の行番号が表示されま
す。
-------------------------------------------------------------------------------
Target\a.txt(2)
Target\a.txt(13)
-------------------------------------------------------------------------------
サンプル
EchoOld 実行時の表示内容
関連
→ SearchStringTemplate
<< new_ReplaceTemplateClass
ReplaceTemplate.xml
設定してください。
そのテンプレートを囲むタグの id 属性（ /MultiText/Text/@id ） と
/MultiText/EnabledTemplateIDs/text() の ID が同じになるように ID を設定してください。
ただし、 /MultiText/EnabledTemplateIDs/text() の各行の先頭には # を記述してください。
# を記述することは、HTML の A href 属性と同じ仕様です。
/MultiText/EnabledTemplateIDs/text() に複数行のテキストを指定すると、複数の
テンプレートについて処理を行います。
テンプレートが id="A" にあるとき（/MultiText/Text[@id='A']/text() にあるとき）、
_Keyword を末尾に追加した id 属性のテキスト （/MultiText/Text[@id='A_Keyword ']/text() ）
にテンプレートの中の１行にヒットする正規表現を設定してください。
上記テンプレートを ReplaceTemplate.xml の一部に設定する内容の例
<EnabledTemplateIDs type="Lines">
#vbslib_copyright
</EnabledTemplateIDs>
<Text id="vbslib_copyright_Keyword"><![CDATA[
vbslib is provided under
]]></Text><Text id="vbslib_copyright"><![CDATA[
'* vbslib is provided under 3-clause BSD license.
'* Copyright (C) Sofrware Design Gallery "Sage Plaisir 21" All Rights Reserved.
]]></Text>
参考
→ OpenByStepPath
'* vbslib is provided under 3-clause BSD license.
'* Copyright (C) Sofrware Design Gallery "Sage Plaisir 21" All Rights Reserved.
テンプレートの例
の /MultiText/Text/text() に、現在使われているテンプレートを
→ RunGetDifference
GetDifference コマンド
OpenByStepPath コマンド
← ▼ ▲
RunGetDifference (ReplaceTemplateClass)
→ SyncFilesMenuLib.vbs
ソース
Sub ReplaceTemplateClass::RunGetDifference()
現在使われているテンプレートと合っていない（古い）テンプレートの中の場所を表示します。
Enterのみ："Target\a.txt"
調べるファイルのパス >
以下の場所にあるテンプレートがマッチしませんでした。
-------------------------------------------------------------------------------
Target\a.txt(5)
-------------------------------------------------------------------------------
サンプル
表示内容
調べる対象のファイルの入力を要求されます。
関連
→ GetLineNumOfTemplateDifference
<< new_ReplaceTemplateClass
← ▼ ▲
SetTargetPath (ReplaceTemplateClass)
Sub ReplaceTemplateClass::SetTargetPath( in_Path as string or PathDictionaryClass )
処理対象のファイルやフォルダーのパスを設定します。
【引数】
in_Path
処理対象のファイルやフォルダーのパス
→ SyncFilesMenuLib.vbs
ソース
ReplaceTemplate.xml
の /MultiText/Target が設定されていないときは、本関数で設定する必要が
あります。
← ▼ ▲
RunReplace (ReplaceTemplateClass)
→ SyncFilesMenuLib.vbs
ソース
Sub ReplaceTemplateClass::RunReplace()
テンプレートを置き換えます。
以下の場所にあるファイルの中にあるテンプレートを置き換えます
編集するフォルダー = Target
ReplaceTemplateID_From = #vbslib_copyright_old
ReplaceTemplateID_To = #vbslib_copyright
続行するには Enter キーを押してください . . .
-------------------------------------------------------------------------------
>ReplaceStringTemplate "Target", "\* Function:"
Target\a.txt
サンプル
表示内容
実行するかどうかの確認を要求されます。
参考
<< new_ReplaceTemplateClass
→ ReplaceTemplate.xml に設定できる値
上記テンプレートを ReplaceTemplate.xml の一部に設定する内容の例
<ReplaceTemplateID_From>#vbslib_copyright_old</ReplaceTemplateID_From>
<ReplaceTemplateID_To >#vbslib_copyright</ReplaceTemplateID_To>
<Text id="vbslib_copyright_old_Keyword"><![CDATA[
vbslib is provided under
]]></Text><Text id="vbslib_copyright_old"><![CDATA[
'* vbslib is provided under 3-clause BSD license.
'* Copyright (C) "Sage Plaisir 21" All Rights Reserved.
]]></Text>
<Text id="vbslib_copyright_Keyword"><![CDATA[
vbslib is provided under
]]></Text><Text id="vbslib_copyright"><![CDATA[
'* vbslib is provided under 3-clause BSD license.
'* Copyright (C) Sofrware Design Gallery "Sage Plaisir 21" All Rights Reserved.
]]></Text>
'* vbslib is provided under 3-clause BSD license.
'* Copyright (C) Sofrware Design Gallery "Sage Plaisir 21" All Rights Reserved.
置き換えた後のテンプレートの例
置き換える前のテンプレートの例
'* vbslib is provided under 3-clause BSD license.
'* Copyright (C) "Sage Plaisir 21" All Rights Reserved.
ReplaceTemplate.xml
してください。 別の /MultiText/Text/text() に、置き換えた後のテンプレートを設定して
ください。
置き換える前のテンプレートを囲むタグの id 属性（ /MultiText/Text/@id ） と
/MultiText/ReplaceTemplateID_From/text() の ID が同じになるように ID を設定してください。
置き換えた後のテンプレートを囲むタグの id 属性（ /MultiText/Text/@id ） と
/MultiText/ReplaceTemplateID_To/text() の ID が同じになるように ID を設定してください。
ただし、 /MultiText/ReplaceTemplateID_From/text() の先頭と
/MultiText/ReplaceTemplateID_To/text() の先頭には # を記述してください。
# を記述することは、HTML の A href 属性と同じ仕様です。
テンプレートが id="A" にあるとき（/MultiText/Text[@id='A']/text() にあるとき）、
_Keyword を末尾に追加した id 属性のテキスト （/MultiText/Text[@id='A_Keyword ']/text() ）
にテンプレートの中の１行にヒットする正規表現を設定してください。
の /MultiText/Text/text() に、置き換える前のテンプレートを設定
← ▼ ▲
Set rep = StartReplace( "a.txt", "a.txt.updating", True )
Do Until rep.r.AtEndOfStream
SplitLineAndCRLF rep.r.ReadLine(), line, cr_lf '// Set "line", "cr_lf"
line = Replace( line, "Value=0", "Value=1" )
rep.w.WriteLine line + cr_lf
Loop
rep.Finish
SafeFileUpdateEx "a.txt.updating", "a.txt", Empty
StartReplace
Set rep = StartReplace( "a.txt", GetTempPath("*.txt"), False )
Do Until rep.r.AtEndOfStream
SplitLineAndCRLF rep.r.ReadLine(), line, cr_lf '// Set "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 のファイルを開きます。
返り値を使って、ファイルにアクセスできます。（下記サンプルを参照）
返り値
コンテキスト
StartReplaceObj
関連
→ AddLastOfFileName
→ GetTempPath
→ T_Replace.vbs # [T_StartReplace]
テスト
改行文字コードは、SrcPath に記述されているものが、そのまま継承されます。 ただし、
get_ADODBConsts
が使える環境である必要があります。 （通常、使えます）
また、rep.r 「以外」のファイルから rep.w にライトするときは、リードするファイルを開くときに、
改行文字コードについて
ReadLine で取得できる行の末尾には、vbCRLF または vbLF が付きます。
その他のサンプル
→ サンプル （ウィザード）
→ サンプル （ドラッグ＆ドロップからテキスト処理）
IsDstWillBeExist に g_VBS_Lib.DstIsBackUp を指定すると、TmpDstPath にバックアップを作成し、
SrcPath 置き換えた後の内容が入ります。
IsDstWillBeExist = False のときは、返り値の Finish メソッドを呼び出すと、全てのファイルを閉じ、
TmpDstPath から SrcPath へ、ファイルコピーを行い、TmpDstPath を削除します。
SplitLineAndCRLF
WriteLine で行を出力するときは、ReadLine で取得した改行文字を付けてください。
SplitLineAndCRLF
を使えば、改行文字を分けることができます。
関連
→ FindStringLines
→ StringStream クラス
new_TextFileLineSeparatorStack
( g_VBS_Lib.KeepLineSeparators ) が必要です。
CutIndentOfMultiLineText
は、改行文字コードを明示的に指定する
MultiTextXML_Class
、
ことができます。
→ OpenForReplace
重要なファイルを上書き更新するときは、StartReplace の TmpDstPath 引数に一時的に
出力するパスを指定し、その一時ファイルを作成した後（ファイルを閉じた後）で、
SafeFileUpdateEx
を呼び出してください。 ただし、内部で２〜３回のファイルコピーを行います。
SplitLineAndCRLF
サンプル
SafeFileUpdateEx
← ▼ ▲
StartReplaceObj クラス
テキストファイルの一部を置き換えるインターフェース
取得
→ StartReplace
→ StartReplace2
r
w
置き換えようとするファイルのストリーム
一時ファイル、または置き換えた後のファイルのストリーム
→ TextStream
→ TextStream
Finish
正常に完了したら呼び出す必要がある関数
→ サンプル
Class_Terminate
デストラクタ。 Finish または ExitFinish が呼ばれなかったら警告します
ExitFinish Empty
置き換えをキャンセルします。
← ▼ ▲
ReplaceTextFile
Sub ReplaceTextFile( SrcPath as string, TmpDstPath as string,
bDstWillBeExist as boolean, ReplaceList as ReplaceItem, Opt as variant )
ファイルの一部を置き換えます。
【引数】
SrcPath
TmpDstPath
置き換えようとするファイル
一時ファイルのパス、または置き換えた後のパス
TmpDstPath が置き換えた後のパス=True, 一時パス=False
bDstWillBeExist
ReplaceList
置き換えるテキスト
Opt
Empty を指定してください
Dim reps : new_ReplaceItem_array reps, 1
reps(0).Src = "%base%" : reps(0).Dst = g_sh.CurrentDirectory
ReplaceTextFile "file.txt", GetTempPath("*.txt"), False, reps, Empty
サンプル：
(src)
1
new_ReplaceItem_array については、
Class ReplaceItem
Public Src
Public Dst
End Class
→ new_ReplaceItem_array : オブジェクトの配列を生成する
%base%
g_sh.CurrentDirectory
file.txt
→ TextFileConvertFormat::Set_
参考
ver4 で、廃止になりました。 OpenForReplace を使ってください。
→ OpenForReplace
← ▼ ▲
サンプル （ドラッグ＆ドロップからテキスト処理）
Sub Main( Opt, AppKey )
Dim c : Set c = g_VBS_Lib
Dim path : path = InputPath( "変換するファイル >", c.CheckFileExists or c.UseArgument1 )
Dim w_:Set w_=AppKey.NewWritable( path ).Enable()
Dim rep, line, cr_lf
Set rep = StartReplace( path, GetTempPath("Replace_*.txt"), c.DstIsBackUp )
Do Until rep.r.AtEndOfStream
SplitLineAndCRLF rep.r.ReadLine(), line, cr_lf
line = "> "+ line
rep.w.WriteLine line + cr_lf
Loop
rep.Finish
start GetEditorCmdLine( path )
End Sub
スクリプト･ファイルに処理をするファイルを直接ドラッグ＆ドロップしても、スクリプト・ファイルをダブル・
クリックして開いたウィンドウに処理するファイルをドラッグ＆ドロップしても処理ができます。
「line = "> "+ line」 の部分を処理内容に書き換えてお使いください。
← ▼ ▲
サンプル （ウィザード）
Sub main2( Opt, AppKey )
Dim exe_name
Dim desktop : desktop = g_sh.SpecialFolders( "Desktop" )
Dim rep, line
Dim w_:Set w_=AppKey.NewWritable( desktop ).Enable()
'//=== Input exe name
Do
exe_name = input( "exe name>" )
If exist( desktop + "\" + exe_name ) Then
Raise 1, "すでにデスクトップに " + exe_name + " が存在するため、新規作成できません"
Else
Exit Do
End If
Loop
'//=== Make output folder
mkdir desktop + "\" + exe_name
copy g_vbslib_folder + "*", desktop + "\" + exe_name + "\scriptlib"
'//=== Make exe_name.c
Set rep = StartReplace( "files\template.c", _
desktop + "\" + exe_name + "\" + exe_name + ".c", True )
Do Until rep.r.AtEndOfStream
line = rep.r.ReadLine()
line = Replace( line, "Sample", exe_name )
rep.w.WriteLine line
Loop
rep.Finish
'//=== Open output folder
Setting_openFolder desktop + "\" + exe_name
End Sub
sample_wizard.vbs
wizard
sample_wizard.vbs
files
template.c
デスクトップに、テンプレート・ファイルを少し加工してフォルダを作成します。
exe name>
と表示されるので、入力すると、
_src\Test\vbslib_test\T_Replace\T_Replace_Sample1 にあります。
← ▼ ▲
StartReplace2
Function StartReplace2( SrcPath as string, MidPath as string, Flags as integer,
TmpDstPath as string, bDstWillBeExist as boolean ) as StartReplaceObj
F_Txt2BinTxt を指定してください（下記）
ファイルの一部を置き換えて、更にフィルタ処理をするための準備をします。
【引数】
SrcPath
TmpDstPath
置き換えようとするファイル
一時ファイルのパス、または置き換えた後のパス
TmpDstPath が置き換えた後のパスかどうか
bDstWillBeExist
返り値
コンテキスト
MidPath
Flags
一時ファイルのパス
StartReplaceObj
F_Txt2BinTxt
StartReplaceObj.w に、Chr(&hFF) から始める行を出力すると、その行はバイナリになり
ます。
→ バイナリ混在テキスト生成 (txt2bintxt.exe)
→ TextFileConvertFormat::Set_
参考
← ▼ ▲
PassThroughLineFilters
Sub PassThroughLineFilters( SrcPath as string, TmpDstPath as string,
IsDstWillBeExist as boolean, Opt as Empty, FilterArray as array of string )
指定のキーワードを含む行を抽出します。
【引数】
SrcPath
TmpDstPath
置き換えようとするファイル
一時ファイルのパス、または置き換えた後のパス
IsDstWillBeExist
TmpDstPath が置き換えた後のパスかどうか
キーワードの配列
Empty または False (=FilterArray に含まない行を抽出）
FilterArray
Opt
(src)
PassThroughLineFilters( "a.txt", GetTempPath("*.txt"), False, Empty, _
Array( "(TRACE)", "(DEBUG)" )
サンプル
(TRACE) と (DEBUG) を含む行だけにします。
→ T_Replace.vbs # [T_PassThroughLineFilters]
テスト
関連
→ grep (検索)
→ FindStringLines
廃止予定
代わり
→ FindStringLines
→ Text (ReplaceTextFile1)
← ▼ ▲
SplitLineAndCRLF
Sub SplitLineAndCRLF( LineAndCRLF as string, out_Line as string, out_CRLF as string )
行の本文と、行末の改行文字を分けます。
【引数】
LineAndCRLF
out_Line
改行文字が末尾に含まれている可能性がある文字列
（出力） 改行文字より前の文字列
ファイル：
vbslib
out_CRLF
（出力） 行末の改行文字
(src)
→ 改行文字コードについて
関連
← ▼ ▲
CutCRLF
Function CutCRLF( Line as string )
改行文字を削除します。
【引数】
Line
返り値
改行文字が削除される文字列
改行文字が削除された文字列
ファイル：
vbslib
(src)
→ T_Replace.vbs # [T_CutCRLF]
テスト
関連
→ SplitLineAndCRLF
← ▼ ▲
Translate
Sub Translate( TranslatorPath as string, FromLanguage as string, ToLanguage as string )
翻訳ファイルの情報に従って、テキストファイルの一部を翻訳します。
【引数】
TranslatorPath
FromLanguage
翻訳ファイル(*.trans)のパス、または、フォルダーのパス
翻訳前の言語。 通常 "JP"
ToLanguage
翻訳後の言語。 通常 "EN"
→ T_Translate.vbs
テスト
英語に翻訳するときに、英文字以外が残っていたときは、get_ToolsLibConsts().E_NotEnglishChar
エラーが発生します。
参考
→ Translate コマンド
ソース
→ ToolsLib.vbs
翻訳ファイル(*.trans) の説明など
TranslatorPath 引数にフォルダーのパスを指定した場合、サブ フォルダーも含めた、拡張子が
.trans のすべての翻訳ファイルから翻訳します。 ある１つの翻訳ファイルから翻訳しても英文字
以外が残っていたときは、すべての翻訳ファイルから翻訳した後でエラーが発生します。
T_Translate1
T_Translate_sth
T_TranslateFolder
関連
→ Switches
スイッチに従って、複数のファイルを編集
← ▼ ▲
TranslateTest
Sub TranslateTest( TranslatorPath as string, FromLanguage as string, ToLanguage as string,
OutFolderPath as string )
翻訳ファイルの情報に従って、テキストファイルの一部を翻訳できるかどうかチェックします。
【引数】
TranslatorPath
FromLanguage
翻訳ファイルのパス、または、フォルダーのパス
翻訳前の言語。 通常 "JP"
ToLanguage
翻訳後の言語。 通常 "EN"
OutFolderPath
翻訳後を格納するフォルダーのパス。 または "" = 出力しない
参考
→ Translate
→ T_Translate.vbs
テスト
→ T_Translate.vbs
→ Translate コマンド
翻訳ファイル(*.trans) の説明など
関連
→ TranslateTest コマンド
EN（英語）に翻訳するときは、翻訳後に Ascii 文字だけ使っているかどうかをチェックします。
Ascii 文字以外の文字があるときは、get_ToolsLibConsts().E_NotEnglishChar エラーになります。
TranslatorPath 引数にフォルダーのパスを指定した場合、サブ フォルダーも含めた、拡張子が
.trans のすべての翻訳ファイルから翻訳できるかどうかチェックします。 ある１つの翻訳ファイル
から翻訳しても英文字以外が残っていたときは、すべての翻訳ファイルから翻訳できるかどうか
チェックした後でエラーが発生します。
翻訳ファイルの内容は上書きされるため注意してください（要 NewWritable）。
翻訳するファイル名と行番号が追記され、行番号の順番でソートされます。
T_TranslateTest
T_TranslateTest_sth
ソース
→ ToolsLib.vbs
←
↓