(for Internet Explorer)
バイナリ・ファイルを比較します。
Function  IsSameBinaryFile( PathA as string, PathB as string, Opt as integer ) as boolean
【引数】
PathA
比較するファイル A のパス
返り値
2つのファイルの内容が同じかどうか
比較するファイル B のパス
PathB
Opt
Empty を指定してください
サンプル
Assert  IsSameBinaryFile( "FileA.jpg", "FileB.jpg", Empty )
テスト
→ T_fc.vbs
関連
→ FileT_isSameBinaryFile (clib)
PathA か PathB のどちらかのファイルがないときは、False を返します。
PathA か PathB の両方のファイルがないときは、True を返します。
T_IsSameBinaryFile
→ vbslib.vbs
ソース
IsSameBinaryFile は、
です。
テキストファイルの拡張子の設定
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 または 比較しないファイルまたはフォルダー名
2つのフォルダーの内容が同じかどうか
返り値
フォルダーの中のファイルの比較は、デフォルトでは、
→ T_fc.vbs
T_IsSameFolder_Echo
→ vbslib.vbs
c.EchoV_NotSame
c.NotSubFolder
違いがあったときに、そのパスを echo_v で表示します
サブ・フォルダーは調べません
Empty または、下記の定数の or、または、
Thumb.db などの隠しファイルを指定すれば、そのファイルは比較対象ではなくします。
が使えます。
正規表現
PathA と PathB にファイルのパスを指定することもできます。
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 に指定してください。
c は、g_VBS_Lib の返り値です。
を指定できます。
サンプル
で比較します。
指定した両方のフォルダーが存在しないときは、True を返します。
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.
参考
If not fc( "result.txt", "ans.txt" ) Then  raise E_TestFail,""
→ T_fc フォルダ
テスト
ソース
→ feq フォルダー
feq.exe のソース
→ T_feq フォルダー
Function  fc_r( path_a as string, path_b as string, redirect_path as string ) as boolean
ファイルやフォルダの内容が同じかどうか調べます。
【引数】
path_a
path_b
1つ目のファイルのパス、またはフォルダのパス
2つ目のファイルのパス、またはフォルダのパス
redirect_path
調べた結果の詳細の出力先のファイルパス、Empty、"nul" 可
返り値
同じかどうか
vbslib.vbs が入ったフォルダに、feq.exe が必要です。
(src)
redirect_path の値
出力先
その他
"nul"
なし
Empty
なし
""
標準出力
ファイル
出力内容については、
Function  fc_ex( PathA as string, PathB as string, Opt as fc_option ) as boolean
ファイルやフォルダの内容が同じかどうか調べます。
【引数】
PathA
1つ目のファイルのパス、またはフォルダのパス
Opt
Empty または オプション
返り値
同じかどうか
vbslib.vbs が入ったフォルダに、feq.exe が必要です。
PathB
2つ目のファイルのパス、またはフォルダのパス
Class  fc_option
  Public  FcOptionIniPath
  Public  FcResultRedirectPath
  Public  m_bStdOut
  Public  IsStartDiffIfNotSame
  Public  IsXmlComparedAsBinary
End Class
オプション指定ファイル fc.ini のパス
FcOptionIniPath、オプション指定ファイル fc.ini
[Excludes]
A = obj
A = proj\Debug
:     :
比較を行わないファイルの一覧
未対応
IsStartDiffIfNotSame
違いが発見されたら、diff を起動。 起動したら、False になります
diff ツールは、
で設定します。
結果を出力するファイルのパス
未対応
未対応
XML として同じでも、テキストが異なれば、異なると判定する
IsXmlComparedAsBinary
False なら、文字コードや空白文字などの違いがあっても、XML ドキュメントのデータが同じであれば
同じと判定します。
デフォルト(Empty)は True です。
→ T_XML.vbs # [T_CompareXml]
テスト
(src)
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 で違いが発見されたら、そのファイルに対して diff を起動します。
このオプションは、fc, fc_r, fc_ex のすべてに設定され、set_fc_option Empty するまで有効です。
返り値は、opt 引数がそのまま返ります。
Function  diff( in_LeftPath as string,  in_RightPath as string,  in_OutputPath as string,
    in_out_Option ) as string
diff を実行して、テキスト ファイルの内容を比較します。
【引数】
in_LeftPath
1つ目の比較するテキスト ファイルのパス
in_RightPath
2つ目の比較するテキスト ファイルのパス
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 の派生プログラムに
該当しない(両立する必要がない)ものと考えています。
参考
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
ます。
には使えます。
上記の差分は GUI で比較表示できます。
Function  ParseUnifiedDiff( in_UnifiedDiff as string ) as UnifiedDiffClass
の出力(unified 形式)を解析します。
diff
array < UnifiedOneDifferenceClass >
UnifiedDiffClass
.Differences
.PlusStart
.PlusOver
.MinusStart
.MinusOver
integer
integer
integer
integer
データ構造
【引数】
in_UnifiedDiff
返り値
diff の出力(unified 形式)
解析結果
追加開始行番号
追加の次の行番号
削除開始行番号
削除の次の行番号
(src)
ソース
テスト
→ ToolsLib.vbs
T_ParseUnifiedDiff
→ T_Diff.vbs
→ diff の出力形式
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
1つ目の比較するフォルダーのパス
in_PathB
2つ目の比較するフォルダーのパス
in_PathC
Empty または、3つ目の比較するフォルダーのパス
in_Option
Empty または
デスクトップの _DiffWithoutKS フォルダーを作り、その中に Keyword Substitution をカットした
ファイルをコピーして、Diff ツールを開きます。
Diff ツールについては、
テスト
ソース
→ T_Diff.vbs
→ ToolsLib.vbs
T_DiffWithoutKS
→ KS フォルダー
関連
/*************************
* $Rev: 43 $
**************************/
/*************************
* $Rev: $
**************************/
43
→ SubVersion - Keyword Substitution
参考
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 コード以外の文字にも対応しています。
patch 関数は、内部で scriptlib\GPL に入っている
をコマンドライン経由で呼び出して
patch
います。
→ 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 コマンドの注意
を守るための処理が行われています。
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 など
参考
使い易くするため、ThreeWayMerge の内部で
ThreeWayMerge は、内部で scriptlib\GPL に入っている
をコマンドライン経由で
Diffutils
呼び出し、Diffutils の出力「データ」を使用しています。 このため、GPL の派生プログラムに
該当しない(両立する必要がない)ものと考えています。
参考
関連
上記の差分は GUI で比較表示できます。
→ diff3 の詳細なサンプル
.IsAutoMergeEx
.SingletonKeywords
.UniqueLineKeywords
True = 拡張自動マージ(デフォルト)、False = diff3 の -E 相当
関連
ソース
→ ToolsLib.vbs
.IsConflictError
今までにコンフリクトが発生したかどうか。 初期値=False
.IsEnableToRaiseConflictError
コンフリクトが発生したらエラーにするかどうか。 初期値=True
.MergeTemplate
コンフリクトが発生したときの置き換えテンプレート。
の返り値。
マージ設定ファイルには、MergeTemplatePath タグに、
new_ReplaceTemplateClass 関数の引数に渡すパスを指定します。
のタグ名と同じです。 一部異なる名前のものは下記に特記しています。
 のオプションのクラスです。
の配列。 正規表現で指定
の配列。 正規表現で指定
.IsOutEach
コンフリクトが発生したら、それぞれ(左と右)を並べるかどうか。
初期値=False
ステップ実行を開始するステップ番号、Empty=ステップ実行しない
テスト
→ T_Diff.vbs
T_ThreeWayMerge*
初期値=Empty
ステップ実行の詳細
Function  LoadThreeWayMergeOptionClass( in_Path as string ) as ThreeWayMergeOptionClass
のオブジェクトをマージ設定ファイルからロードします。
【引数】
in_Path
ロードするマージ設定ファイルのパス
参考
ソース
→ ToolsLib.vbs
注意
ThreeWayMergeSet タグはロードしません。
でロードします。
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 の両方で異なる内容を追加したものは、
2つ目以降の同じ内容の行を追加しない。
例: #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 の両方で異なる内容に変更したものは、
右を残す。
ただし、マージ後に統合した内容に変えたほうが良い。
パッチをあてたほう(右)が特徴を表しているため。
例: プロジェクト名など、1つしか設定できない設定
(要設定)がある内容を、
などを設定すると、より多くの
ケースで自動的にマージを行うことができます。
::IsAutoMergeEx = False の場合は、diff3 -E と同じ
マージを行います。  True に設定した場合は、内部で diff3 -A を使って詳細な差分を調べ、より多くのケースで
自動的にマージを行い、コンフリクトするケースを減らします。
::UniqueLineKeywords
::SingletonKeywords
設定
設定
行うようにすることができます。
がコンフリクトとするケースでも、その一部のケースで、自動的にマージを