(for Internet Explorer)
← ▼ ▲
↑
IsSameBinaryFile
バイナリ・ファイルを比較します。
Function IsSameBinaryFile( PathA as string, PathB as string, Opt as integer ) as boolean
【引数】
PathA
比較するファイル A のパス
返り値
２つのファイルの内容が同じかどうか
比較するファイル B のパス
PathB
Opt
Empty を指定してください
サンプル
Assert IsSameBinaryFile( "FileA.jpg", "FileB.jpg", Empty )
テスト
→ T_fc.vbs
→ fc コマンド
関連
→ FileT_isSameBinaryFile (clib)
PathA か PathB のどちらかのファイルがないときは、False を返します。
PathA か PathB の両方のファイルがないときは、True を返します。
T_IsSameBinaryFile
→ vbslib.vbs
ソース
IsSameBinaryFile は、
です。
比較関数型
→ TextFileExtension (g_Vers)
テキストファイルの拡張子の設定
← ▼ ▲
IsSameFolder
Function IsSameFolder( PathA as string, PathB as string,
in_out_Options as variant ) as boolean
If IsSameFolder( folder_A, folder_B, Empty ) Then
フォルダーの内容が同じかどうか比較します。
【引数】
in_out_Options
オプション、または Empty
関連
テスト
サンプル
ソース
T_IsSameFolder
PathA
比較するフォルダー A のパス
比較するフォルダー B のパス
PathB
Empty または 比較しないファイルまたはフォルダー名
２つのフォルダーの内容が同じかどうか
返り値
.ExceptNames
フォルダーの中のファイルの比較は、デフォルトでは、
IsSameBinaryFile
→ T_fc.vbs
→ fc (比較)
T_IsSameFolder_Echo
→ vbslib.vbs
in_out_Options 引数
c.EchoV_NotSame
c.NotSubFolder
違いがあったときに、そのパスを echo_v で表示します
サブ・フォルダーは調べません
Empty または、下記の定数の or、または、
→ 下記
→ 下記
Thumb.db などの隠しファイルを指定すれば、そのファイルは比較対象ではなくします。
が使えます。
正規表現
PathA と PathB にファイルのパスを指定することもできます。
OptionsFor_IsSameFolder_Class
as array of string
Set options = new OptionsFor_IsSameFolder_Class
options.BitFlags = c.EchoV_NotSame
options.ExceptNames = Array( "Thumbs.db" )
If IsSameFolder( folder_A, folder_B, options ) Then
IsSameFolder は、
です。
比較関数型
.IsSameFileFunction
ファイルを比較する関数。
比較関数型
.IsSameFileFunction_Parameter
IsSameFileFunction に指定した関数の第3引数に渡す値
T_IsSameFolder_File
拡張子によって比較する処理を変えたいときは、拡張子で分岐する関数を作成して、オプション
の IsSameFileFunction に指定してください。
→ MD5 リスト
c は、g_VBS_Lib の返り値です。
を指定できます。
OptionsFor_IsSameFolder_Class
→ 下記
サンプル
で比較します。
指定した両方のフォルダーが存在しないときは、True を返します。
← ▼ ▲
fc (比較)
Function fc( PathA as string, PathB as string )
ファイル、またはフォルダが同一かどうかを比較します。
【引数】
PathA
PathB
比較するファイルパスA、またはフォルダパスA
比較するファイルパスB、またはフォルダパスB
返り値
同一=True
サンプル：
Assert fc( "result.txt", "ans.txt" )
vbslib.vbs が入ったフォルダに、feq.exe が必要です。
(src)
標準出力： ファイルの内容が同じだったとき
fc "result.txt", "ans.txt"
same.
fc "result.txt", "ans.txt"
different.
標準出力： ファイルの内容が違ったとき
標準出力： フォルダの内容が同じだったとき
fc "folder1", "folder2"
same.
標準出力： フォルダの内容が違ったとき
fc "folder1", "folder2"
Not found "sub\file1.txt" in "folder1"
Not found "sub2" in "folder2"
Not same "sub\file2.txt"
different.
→ ファイル名、パス (Windows)
参考
If not fc( "result.txt", "ans.txt" ) Then raise E_TestFail,""
→ T_fc フォルダ
テスト
ソース
→ feq フォルダー
feq.exe のソース
→ T_feq フォルダー
← ▼ ▲
fc_r
Function fc_r( path_a as string, path_b as string, redirect_path as string ) as boolean
ファイルやフォルダの内容が同じかどうか調べます。
【引数】
path_a
path_b
１つ目のファイルのパス、またはフォルダのパス
２つ目のファイルのパス、またはフォルダのパス
redirect_path
調べた結果の詳細の出力先のファイルパス、Empty、"nul" 可
返り値
同じかどうか
vbslib.vbs が入ったフォルダに、feq.exe が必要です。
(src)
redirect_path の値
出力先
その他
"nul"
なし
Empty
なし
""
標準出力
ファイル
→ fc
出力内容については、
← ▼ ▲
fc_ex
Function fc_ex( PathA as string, PathB as string, Opt as fc_option ) as boolean
ファイルやフォルダの内容が同じかどうか調べます。
【引数】
PathA
１つ目のファイルのパス、またはフォルダのパス
Opt
Empty または オプション
返り値
同じかどうか
vbslib.vbs が入ったフォルダに、feq.exe が必要です。
PathB
２つ目のファイルのパス、またはフォルダのパス
Class fc_option
Public FcOptionIniPath
Public FcResultRedirectPath
Public m_bStdOut
Public IsStartDiffIfNotSame
Public IsXmlComparedAsBinary
End Class
Opt 引数、fc_option
オプション指定ファイル fc.ini のパス
FcOptionIniPath、オプション指定ファイル fc.ini
[Excludes]
A = obj
A = proj\Debug
: :
比較を行わないファイルの一覧
未対応
IsStartDiffIfNotSame
違いが発見されたら、diff を起動。 起動したら、False になります
diff ツールは、
Setting_getDiffCmdLine
で設定します。
結果を出力するファイルのパス
未対応
未対応
XML として同じでも、テキストが異なれば、異なると判定する
IsXmlComparedAsBinary
False なら、文字コードや空白文字などの違いがあっても、XML ドキュメントのデータが同じであれば
同じと判定します。
デフォルト（Empty）は True です。
→ T_XML.vbs # [T_CompareXml]
テスト
(src)
← ▼ ▲
set_fc_option
set_fc_option( new fc_option ).m_bStartDiff = True
If not fc( file_a, file_b ) Then Fail
If not fc( file_a, file_c ) Then Fail
set_fc_option Empty
Function set_fc_option( opt as fc_option ) as fc_option
fc
のオプションを設定します。 デバッグ用です。
サンプル： fc で違いが発見されたら、そのファイルに対して diff を起動します。
このオプションは、fc, fc_r, fc_ex のすべてに設定され、set_fc_option Empty するまで有効です。
返り値は、opt 引数がそのまま返ります。
fc_option
← ▼ ▲
マージ、diff
→ ThreeWayMerge
→ FourWayMerge
→ diff
← ▼ ▲
diff
Function diff( in_LeftPath as string, in_RightPath as string, in_OutputPath as string,
in_out_Option ) as string
diff を実行して、テキスト ファイルの内容を比較します。
【引数】
in_LeftPath
１つ目の比較するテキスト ファイルのパス
in_RightPath
２つ目の比較するテキスト ファイルのパス
in_OutputPath
比較した結果を出力するファイルのパス
in_out_Option
Empty または get_ToolsLibConsts().DiffForPatch
→ ToolsLib.vbs
テスト
ソース
→ T_Diff.vbs
T_ParseUnifiedDiff
1
<<<<<<< Left.txt
LLL
=======
RRR
>>>>>>> Right.txt
2
3
サンプル
Output.txt
diff 関数は、内部で scriptlib\GPL に入っている
をコマンドライン経由で
Diffutils
呼び出し、Diffutils の出力「データ」を使用しています。 このため、GPL の派生プログラムに
該当しない（両立する必要がない）ものと考えています。
diff 関数の内部と Diffutils
→ GPL のプログラムを含む vbslib の再配布の注意点
参考
Windows の GNU UNIX コマンドの注意
を守るための処理が行われています。
使い易くするため、ThreeWayMerge の内部で
1
LLL
2
3
1
RRR
2
3
Left.txt
Right.txt
diff "Left.txt", "Right.txt", "Output.txt", Empty
返り値
比較した結果（in_OutputPath = Empty のとき）
比較するテキストが同じ内容だったときは、その内容がそのまま出力されます。
in_out_Option = get_ToolsLibConsts().DiffForPatch を指定すると、unified 形式で出力されます。
GnuWin の diff とは異なり、Ascii コード以外の文字にも対応しています。
ただし、get_ToolsLibConsts().DiffForPatch を指定しても、GnuWin の patch には使えなくなり
Set tc = get_ToolsLibConsts()
diff "Left.txt", "Right.txt", "Output.txt", tc.DiffForPatch
サンプル
Right.txt
Left.txt
1
RRR
2
3
Output.txt
--- Left.txt 2016-09-04 17:45:05.422985300 +0900
+++ Right.txt 2016-09-04 17:45:05.423985100 +0900
@@ -1,4 +1,4 @@
1
-LLL
+RRR
2
3
1
LLL
2
3
ます。
vbslib の patch
には使えます。
→ DiffTag コマンド
上記の差分は GUI で比較表示できます。
← ▼ ▲
ParseUnifiedDiff
Function ParseUnifiedDiff( in_UnifiedDiff as string ) as UnifiedDiffClass
の出力（unified 形式）を解析します。
diff
UnifiedDiffClass
array < UnifiedOneDifferenceClass >
UnifiedDiffClass
.Differences
.PlusStart
.PlusOver
.MinusStart
.MinusOver
integer
integer
integer
integer
データ構造
【引数】
in_UnifiedDiff
返り値
diff の出力（unified 形式）
解析結果
追加開始行番号
追加の次の行番号
削除開始行番号
削除の次の行番号
→ UnifiedDiffClass
(src)
ソース
テスト
→ ToolsLib.vbs
T_ParseUnifiedDiff
→ T_Diff.vbs
→ diff の出力形式
← ▼ ▲
DiffWithoutKS
Sub DiffWithoutKS( in_PathA as string, in_PathB as string, in_PathC as string,
in_Option as Empty or DiffCmdLineOptionClass )
SubVersion などの Keyword Substitution をカットしてから、フォルダーの内容を比較します。
【引数】
in_PathA
１つ目の比較するフォルダーのパス
in_PathB
２つ目の比較するフォルダーのパス
in_PathC
Empty または、３つ目の比較するフォルダーのパス
in_Option
Empty または
→ DiffCmdLineOptionClass
デスクトップの _DiffWithoutKS フォルダーを作り、その中に Keyword Substitution をカットした
ファイルをコピーして、Diff ツールを開きます。
Diff ツールについては、
→ Setting_getDiffCmdLine
→ Setting_getFolderDiffCmdLine
テスト
ソース
→ T_Diff.vbs
→ ToolsLib.vbs
T_DiffWithoutKS
→ KS フォルダー
関連
→ DiffWithoutKS コマンド
/*************************
* $Rev: 43 $
**************************/
/*************************
* $Rev: $
**************************/
43
→ SubVersion - Keyword Substitution
参考
← ▼ ▲
patch
Sub patch( in_OldPath as string, in_DiffFilePath as string, in_OutputPath as string,
in_out_Option )
patch を実行して、テキスト ファイルの内容を更新します。 （パッチをあてます）
【引数】
in_OldPath
パッチをあてる前のテキスト ファイルのパス
in_DiffFilePath
unified 形式の差分のテキスト ファイルのパス
in_OutputPath
パッチをあてた後のテキスト ファイルのパス
in_out_Option
Empty を指定してください
→ ToolsLib.vbs
テスト
ソース
→ T_Diff.vbs
T_Patch
GnuWin の diff とは異なり、Ascii コード以外の文字にも対応しています。
→ diff 関数の内部と Diffutils
patch 関数は、内部で scriptlib\GPL に入っている
をコマンドライン経由で呼び出して
patch
います。
← ▼ ▲
ThreeWayMerge
→ T_Diff.vbs
テスト
ソース
→ ToolsLib.vbs
Sub ThreeWayMerge( in_BasePath as string, in_LeftPath as string, in_RightPath as string,
in_MergedOutputPath as string, in_out_Option as ThreeWayMergeOptionClass )
3ウェイ マージ（3方向マージ）をします。
【引数】
in_BasePath
in_LeftPath
ブランチする前のテキスト ファイルのパス
ブランチ Left で更新したテキスト ファイルのパス
in_RightPath
ブランチ Right で更新したテキスト ファイルのパス
Windows の GNU UNIX コマンドの注意
を守るための処理が行われています。
ThreeWayMerge の内部と Diffutils
in_MergedOutputPath
3ウェイマージした結果を出力するファイルのパス
Base
Left
Right
Merged
コンフリクトが発生したら、E_Conflict エラーになります。
エラーのときでも、in_MergedOutputPath 引数に渡したパスにファイルが出力され、下記のように
コンフリクトしたことを示す内容が出力されます。 (diff3 では、一部自動的にマージします）
in_out_Option
Empty またはオプション
<<<<<<< Left.txt
LLL
||||||| Base.txt
=======
RRR
>>>>>>> Right.txt
Left.txt
LLL
Right.txt
RRR
カッコ：
意味：
Base.txt
T_ThreeWayMerge など
→ ThreeWayMergeOptionClass
→ ThreeWayMerge の拡張自動マージ
参考
使い易くするため、ThreeWayMerge の内部で
ThreeWayMerge は、内部で scriptlib\GPL に入っている
をコマンドライン経由で
Diffutils
呼び出し、Diffutils の出力「データ」を使用しています。 このため、GPL の派生プログラムに
該当しない（両立する必要がない）ものと考えています。
→ GPL のプログラムを含む vbslib の再配布の注意点
参考
→ ThreeWayMerge コマンド
関連
→ UpdateModule コマンド
→ ThreeWayMerge コマンドのソース
→ DiffTag コマンド
上記の差分は GUI で比較表示できます。
→ diff3 の詳細なサンプル
← ▼ ▲
ThreeWayMergeOptionClass
→ ThreeWayMerge の拡張自動マージ
ThreeWayMerge
.IsAutoMergeEx
.SingletonKeywords
<< ThreeWayMerge
.UniqueLineKeywords
True = 拡張自動マージ（デフォルト）、False = diff3 の -E 相当
→ 正規表現
→ LoadThreeWayMergeOptionClass
関連
ソース
→ ToolsLib.vbs
.IsConflictError
今までにコンフリクトが発生したかどうか。 初期値=False
.IsEnableToRaiseConflictError
コンフリクトが発生したらエラーにするかどうか。 初期値=True
.MergeTemplate
コンフリクトが発生したときの置き換えテンプレート。
new_ReplaceTemplateClass 関数
の返り値。
→ マージ設定ファイル
マージ設定ファイルには、MergeTemplatePath タグに、
new_ReplaceTemplateClass 関数の引数に渡すパスを指定します。
マージ設定ファイル
のタグ名と同じです。 一部異なる名前のものは下記に特記しています。
のオプションのクラスです。
→ ReplaceTemplate.xml
シングルトン キーワード
ユニーク ライン キーワード
の配列。 正規表現で指定
の配列。 正規表現で指定
.IsOutEach
コンフリクトが発生したら、それぞれ（左と右）を並べるかどうか。
初期値=False
.BreakStepNum
ステップ実行を開始するステップ番号、Empty=ステップ実行しない
テスト
→ T_Diff.vbs
T_ThreeWayMerge*
→ FileWatcher
初期値=Empty
ステップ実行の詳細
← ▼ ▲
LoadThreeWayMergeOptionClass
Function LoadThreeWayMergeOptionClass( in_Path as string ) as ThreeWayMergeOptionClass
のオブジェクトをマージ設定ファイルからロードします。
【引数】
in_Path
ロードするマージ設定ファイルのパス
ThreeWayMergeOptionClass
→ マージ設定ファイル
参考
ソース
→ ToolsLib.vbs
注意
ThreeWayMergeSet タグはロードしません。
でロードします。
SyncFilesX_Class::LoadScanListUpAll
← ▼ ▲
ThreeWayMerge は、
ThreeWayMerge の拡張自動マージ
Add : 追加したケース
Both
<<<<<<< Base.txt
=======
Both
>>>>>>> Right.txt
→ diff3 の詳細なサンプル
参考
diff3 -A の出力
自動マージ後
Left と Right の両方で同じ内容を追加したものは、
そのまま残す。
同じ内容であるということは、チェック済みの可能性が高い。
<<<<<<< Left.txt
LLL
||||||| Base.txt
=======
RRR
>>>>>>> Right.txt
LLL
RRR
Left と Right の両方で異なる内容を追加したものは、
それぞれを残す。
それぞれが別の目的で追加した可能性が高い。
Both
LLL
Both
RRR
<<<<<<< Left.txt
Both
LLL
||||||| Base.txt
=======
Both
RRR
>>>>>>> Right.txt
Left と Right の両方で異なる内容を追加したものは、
それぞれを残す。
それぞれが別の目的で追加した可能性が高い。
同じ内容がある部分は、初期化関数など、それぞれで必要な
ケースがある。
Both
Modify : 変更したケース
自動マージ後
diff3 -A の出力
<<<<<<< Base.txt
Before
=======
Both
>>>>>>> Right.txt
Left と Right の両方で同じ内容に変更したものは、
そのまま残す。
同じ内容であるということは、チェック済みの可能性が高い。
<<<<<<< Left.txt
Both
LLL
||||||| Base.txt
Before1
Before2
=======
Both
RRR
>>>>>>> Right.txt
（コンフリクト エラー、カッコ付きのまま残す）
Left と Right の両方で異なる内容に変更したものは、
コンフリクト エラーにする。 （手動で直す）
部分的に同じでも、変更した内容が誤っている可能性が高い。
Delete : 削除したケース
diff3 -A の出力
自動マージ後
<<<<<<< Base.txt
Both
=======
>>>>>>> Right.txt
（無くす）
同じ個所を削除したものは、
そのまま削除する。
同じ箇所の削除であるということは、チェック済みの可能性が高い。
<<<<<<< Left.txt
||||||| Base.txt
Both
LLL
=======
LLL
>>>>>>> Right.txt
（コンフリクト エラー、カッコ付きのまま残す）
異なる範囲を削除したものは、
コンフリクト エラーにする。 （手動で直すか、特定の内容で置き換える）
削除した範囲が誤っている可能性が高い。
<<<<<<< Left.txt
UniqueLineKeyword A
||||||| Base.txt
=======
UniqueLineKeyword A
UniqueLineKeyword B
>>>>>>> Right.txt
UniqueLineKeyword A
UniqueLineKeyword B
Left と Right の両方で異なる内容を追加したものは、
２つ目以降の同じ内容の行を追加しない。
例： #include
ただし、差分があった前後にもユニーク ライン キーワードがあり、
それらの行に、追加した内容と同じ内容の行があれば、一切追加しない。
<<<<<<< Left.txt
LLL
||||||| Base.txt
Before
=======
RRR
>>>>>>> Right.txt
Left と Right の両方で異なる内容に変更したものは、
コンフリクト エラーにする。 （手動で直すか、特定の内容で置き換える）
変更した内容が誤っている可能性が高い。
（コンフリクト エラー、カッコ付きのまま残す）
<<<<<<< Left.txt
SingletonKeyword L
||||||| Base.txt
SingletonKeyword B
=======
SingletonKeyword R
>>>>>>> Right.txt
（要設定）がある内容を、
SingletonKeyword R
Left と Right の両方で異なる内容に変更したものは、
右を残す。
ただし、マージ後に統合した内容に変えたほうが良い。
パッチをあてたほう（右）が特徴を表しているため。
例： プロジェクト名など、１つしか設定できない設定
シングルトン キーワード
ユニーク ライン キーワード
（要設定）がある内容を、
ユニーク ライン キーワード
シングルトン キーワード
や
などを設定すると、より多くの
ケースで自動的にマージを行うことができます。
<< ThreeWayMerge
ThreeWayMergeOptionClass
::IsAutoMergeEx = False の場合は、diff3 -E と同じ
マージを行います。 True に設定した場合は、内部で diff3 -A を使って詳細な差分を調べ、より多くのケースで
自動的にマージを行い、コンフリクトするケースを減らします。
→ ThreeWayMergeOptionClass
::UniqueLineKeywords
::SingletonKeywords
→ ThreeWayMergeOptionClass
設定
設定
Diffutils の diff3
行うようにすることができます。
がコンフリクトとするケースでも、その一部のケースで、自動的にマージを
→ マージ設定ファイル
ReplaceTemplate.xml
や
←
↓