CSVファイル比較ツールが欲しい
二つのCSVファイルをカラム単位で比較してくれて、分かりやすい(紙出し出来る)形式で出力してくれるツールはないものか。
発端は、あるバッチプログラムの修正を行うことになったことです。
バッチプログラムは、
入力(ファイル)→プログラム→テーブル
というような構成になっているのですが、プログラムを修正するのであれば、
- 入力(ファイル)→修正前プログラム→テーブル(修正前の結果)
- 入力(ファイル)→修正後プログラム→テーブル(修正後の結果)
の二つを実施して、修正前後の結果テーブルの中身を比較・検証すべきだよね、と指摘されました。
で、テーブルの中身をCSVファイルに落とすツールは持っていたので(これまた、SQL*PlusでAccessでみるとNUMBER(18,3)が1E14とかになってしまう問題を回避したものだったりするのだが)、じゃあCSVファイルを比較すればいいねってことになりました。
が、ちょっと探してもない。画面上で比較できるツールはあったものの(名前忘れた)、比較結果を分かりやすく、かつ、印刷を意識したツールはなさそうでした。
仕方がないので、超々機能限定版を作ってみることに。
こんな感じになりました。(入力ファイル名が固定なのは、単なる手抜きだったりする)
Set fs = CreateObject("Scripting.FileSystemObject") Set ts1 = fs.OpenTextFile("pre.txt") Set ts2 = fs.OpenTextFile("post.txt") While ts1.AtEndOfLine = False lineNum = ts1.Line line1 = ts1.readLine line2 = ts2.readLine line1Split = split(line1, ",") line2Split = split(line2, ",") WScript.Echo lineNum & ",修正前," & line1 WScript.Echo lineNum & ",修正後," & line2 diffLine = "" For i=0 to UBound(line1Split) If i <> 0 Then diffLine = diffLine & "," End If If line1Split(i) = line2Split(i) Then diffLine = diffLine & " " Else diffLine = diffLine & "×" End If Next WScript.Echo lineNum & ",比較," & diffLine Wend ts1.close ts2.close
これを流すと、こんな感じになる。
・修正前ファイル a,b,c,d,e 1,2,3,4,5 ・修正後ファイル a,b,c,d,f 1,2,5,4,5 ・結果ファイル 1,修正前,a,b,c,d,e 1,修正後,a,b,c,d,f 1,比較, , , , ,× 2,修正前,1,2,3,4,5 2,修正後,1,2,5,4,5 2,比較, , ,×, ,
この結果ファイルをExcelとかに貼って、適当に加工してあげれば印刷にも耐えうるという、自分的には画期的なツールだったりします。
そもそも、この出力の形式って、汎用機のコンペアが出力する形式に似せたんですよね。意外にも(?)、まだまだパクれる良い習慣っていうのが、汎用系開発にはあるようです。
そんなわけで、もっとよさげなツールがあれば、ご紹介ください。よろしくお願いしますm(_ _)m