質問 |
||
| QNo.3991018 | ファイルを比較して差分のみを出力するには…? | |
|---|---|---|
| 質問者:taoi1981 |
とつぜんですみません。緊急なので投稿しました。 VBSを使って、2つのファイル(ファイルAとファイルB)の1行目からファイルの終わりまでを比較して差分を出力するプログラムを作成したいと考えています。 ファイルの1列目は主キーとなっております。 <ファイルA> 100,A 110,B 133,D 155,R … <ファイルB> 100,A 110,B 133,F 155,P … また差分の出力は上の例でいくと、 133,D → F 155,R → P というようなかたちでファイルに出力したいです。 どなたかアドバイス頂けないでしょうか? よろしくお願いします。 |
|
困り度:
|
||
| 質問投稿日時: 08/05/01 22:51 |
||
回答 |
|
| ANo.1 | ADOのデータベースとして扱うと簡単です。 Dim Aファイル, Bファイル Dim CON, RST, TXT Dim FSO, STM Dim F1, F2, F3, F4 '== ファイル名を定義(xx〜は実際のパス名にすること) Aファイル = "C:\xx〜\A.txt" 'Aファイルのパス名 Bファイル = "C:\xx〜\B.txt" 'Bファイルのパス名 '== 接続オブジェクトを生成する Set CON = CreateObject("ADODB.Connection") '== 接続文字列を生成する TXT = "Provider=Microsoft.Jet.OLEDB.4.0;" TXT = TXT & "Data Source=C:\xx〜\;" TXT = TXT & "Extended Properties=""TEXT;FMT=DELIMITED;HDR=NO;""" '== 接続(パスやキーワードを間違うとエラーになる) CON.Open TXT '== SQLを生成する(両ファイルに存在し、第2フィールドが異なる) TXT = "SELCT A.F1,A.F2,B.F2,1 FROM " & Aファイル & " AS A" TXT = TXT & " INNER JOIN " & Bファイル & " AS B ON " TXT = TXT & " A.F1=B.F1 WHERE A.F2<>B.F2" '== SQLを生成する(Aファイルにのみ存在する) TXT = TXT & " UNION SELECT A.F1,A.F2,B.F1,2 FROM " & Aファイル & " AS A" TXT = TXT & " LEFT JOIN " & Bファイル & " AS B ON " TXT = TXT & " A.F1=B.F1 WHERE B.F1 Is Null" '== SQLを生成する(Bファイルにのみ存在する) TXT = TXT & " UNION SELECT B.F1,B.F2,A.F1,3 FROM " & Aファイル & " AS A" TXT = TXT & " RIGHT JOIN " & Bファイル & " AS B ON " TXT = TXT & " A.F1=B.F1 WHERE A.F1 Is Null" '== レコードセットを作成する(SQLを間違うとエラーになる) Set RST = CON.Execute(TXT) '== 出力ファイルを開く Set FSO = CreateObject("Scripting.FileSystemObject") Set STM = FSO.CreateTextFile("C:\xx〜\結果.txt", True) '== 出力ループ(レコードセットのEOFまで) Do Until RST.EOF '== 核フィールドを取得 F1 = RST.Fields(0).Value F2 = RST.Fields(1).Value F3 = RST.Fields(2).Value F4 = RST.Fields(3).Value Select Case F4 '分類による処理 Case 1: STM.WriteLine F1 & "," & F2 & "→" & F3 Case 2: STM.WriteLine F1 & "," & F2 & "→(Bなし)" Case 3: STM.WriteLine "(Aなし)→" & F1 & "," & F2 End Select '== 次のレコードへ移動する RST.MoveNext Loop '== 各オブジェクトを閉じる STM.Close RST.Close CON.Close |
|---|---|
| 回答者:nda23 | |
| 種類:回答 どんな人:専門家 自信:参考意見 |
|
| 回答日時: 08/05/02 11:13 |
|
| |
| この回答への補足 | この回答に補足をつける(質問者のみ) |
| この回答へのお礼 | この回答にお礼をつける(質問者のみ) |