これは、テーブルを比較し、その相違点を要約し、その要約をパッチ ファイルとして使用するためのライブラリです。これは、共通の起源を共有するテーブル、つまり「同じ」テーブルの複数のバージョンを比較するために最適化されています。
ライブデモについては、以下を参照してください。
https://paulfitz.github.io/daff/
お気に入りの言語のライブラリをインストールします。
npm install daff -g # node/javascript
pip install daff # python
gem install daff # ruby
composer require paulfitz/daff-php # php
install.packages( ' daff ' ) # R wrapper by Edwin de Jonge
bower install daff # web/javascript
他の翻訳はここから入手できます。
https://github.com/paulfitz/daff/releases
または、ライブラリを使用して、Chrome 拡張機能を介して github 上の CSV の差分を表示します。
https://github.com/theodi/csvhub
daff
で使用される diff 形式はここで指定されます。
http://paulfitz.github.io/daff-doc/spec.html
このライブラリは、coopy ツールボックスの機能を簡略化したバージョンです (http://share.find.coop を参照)。異なる生成元のテーブル、自動生成された ID、またはその他の複雑なテーブルを比較するには、coopy ツールボックスをチェックしてください。
daff
/ daff.py
/ daff.rb
ユーティリティ プログラムとして実行できます。
$ daff
daff can produce and apply tabular diffs.
Call as:
daff a.csv b.csv
daff [--color] [--no-color] [--output OUTPUT.csv] a.csv b.csv
daff [--output OUTPUT.html] a.csv b.csv
daff [--www] a.csv b.csv
daff parent.csv a.csv b.csv
daff --input-format sqlite a.db b.db
daff patch [--inplace] a.csv patch.csv
daff merge [--inplace] parent.csv a.csv b.csv
daff trim [--output OUTPUT.csv] source.csv
daff render [--output OUTPUT.html] diff.csv
daff copy in.csv out.tsv
daff in.csv
daff git
daff version
The --inplace option to patch and merge will result in modification of a.csv.
If you need more control, here is the full list of flags:
daff diff [--output OUTPUT.csv] [--context NUM] [--all] [--act ACT] a.csv b.csv
--act ACT: show only a certain kind of change (update, insert, delete, column)
--all: do not prune unchanged rows or columns
--all-rows: do not prune unchanged rows
--all-columns: do not prune unchanged columns
--color: highlight changes with terminal colors (default in terminals)
--context NUM: show NUM rows of context (0=none)
--context-columns NUM: show NUM columns of context (0=none)
--fail-if-diff: return status is 0 if equal, 1 if different, 2 if problem
--id: specify column to use as primary key (repeat for multi-column key)
--ignore: specify column to ignore completely (can repeat)
--index: include row/columns numbers from original tables
--input-format [csv|tsv|ssv|psv|json|sqlite]: set format to expect for input
--eol [crlf|lf|cr|auto]: separator between rows of csv output.
--no-color: make sure terminal colors are not used
--ordered: assume row order is meaningful (default for CSV)
--output-format [csv|tsv|ssv|psv|json|copy|html]: set format for output
--padding [dense|sparse|smart]: set padding method for aligning columns
--table NAME: compare the named table, used with SQL sources. If name changes, use 'n1:n2'
--unordered: assume row order is meaningless (default for json formats)
-w / --ignore-whitespace: ignore changes in leading/trailing whitespace
-i / --ignore-case: ignore differences in case
daff render [--output OUTPUT.html] [--css CSS.css] [--fragment] [--plain] diff.csv
--css CSS.css: generate a suitable css file to go with the html
--fragment: generate just a html fragment rather than a page
--plain: do not use fancy utf8 characters to make arrows prettier
--unquote: do not quote html characters in html diffs
--www: send output to a browser
サポートされている形式は、CSV、TSV、Sqlite ( --input-format sqlite
または.sqlite
拡張子付き)、および ndjson です。
daff git csv
実行して、リポジトリ内の*.csv
ファイルの差分およびマージ ハンドラーとして daff をインストールします。これを手動で行う手順については、 daff git
実行してください。 git が行だけでなく行と列を突然理解するようになるため、CSV の差分とマージがよりスマートになります。
daff
サポートされている言語のライブラリとして使用できます。ここではJavaScriptの例を取り上げます。 Web ページでdaff
使用するには、まずdaff.js
をインクルードします。
< script src =" daff.js " > </ script >
または、ブラウザ外でノードを使用する場合:
var daff = require ( 'daff' ) ;
具体的にするために、テーブルの 2 つのバージョン、 data1
とdata2
あると仮定します。
var data1 = [
[ 'Country' , 'Capital' ] ,
[ 'Ireland' , 'Dublin' ] ,
[ 'France' , 'Paris' ] ,
[ 'Spain' , 'Barcelona' ]
] ;
var data2 = [
[ 'Country' , 'Code' , 'Capital' ] ,
[ 'Ireland' , 'ie' , 'Dublin' ] ,
[ 'France' , 'fr' , 'Paris' ] ,
[ 'Spain' , 'es' , 'Madrid' ] ,
[ 'Germany' , 'de' , 'Berlin' ]
] ;
これらのテーブルをライブラリにアクセスできるようにするには、それらをdaff.TableView
でラップします。
var table1 = new daff . TableView ( data1 ) ;
var table2 = new daff . TableView ( data2 ) ;
これで、2 つのテーブルの行と列の間の位置合わせを計算できるようになりました。
var alignment = daff . compareTables ( table1 , table2 ) . align ( ) ;
アライメントからの差分を生成するには、まず出力用のテーブルが必要です。
var data_diff = [ ] ;
var table_diff = new daff . TableView ( data_diff ) ;
diff のデフォルト オプションを使用する場合:
var flags = new daff . CompareFlags ( ) ;
var highlighter = new daff . TableDiff ( alignment , flags ) ;
highlighter . hilite ( table_diff ) ;
diff はハイライト形式のdata_diff
になりました。ここで仕様を参照してください。
http://paulfitz.github.io/daff-doc/spec.html
[ [ '!' , '' , '+++' , '' ] ,
[ '@@' , 'Country' , 'Code' , 'Capital' ] ,
[ '+' , 'Ireland' , 'ie' , 'Dublin' ] ,
[ '+' , 'France' , 'fr' , 'Paris' ] ,
[ '->' , 'Spain' , 'es' , 'Barcelona->Madrid' ] ,
[ '+++' , 'Germany' , 'de' , 'Berlin' ] ]
視覚化するために、これをセルに適切なクラスを含む HTML テーブルに変換して、挿入、削除、更新などを色分けできるようにすることができます。これは次のように実行できます。
var diff2html = new daff . DiffRender ( ) ;
diff2html . render ( table_diff ) ;
var table_diff_html = diff2html . html ( ) ;
3 方向の違い (つまり、共通の祖先の知識を前提とした 2 つのテーブルの比較) の場合は、 daff.compareTables3
(最初の引数として祖先テーブルを指定) を使用します。
その違いをパッチとして適用する方法は次のとおりです。
var patcher = new daff . HighlightPatch ( table1 , table_diff ) ;
patcher . apply ( ) ;
// table1 should now equal table2
他の言語の場合は、リリース ページのパッケージにサンプル コードが含まれています。
daff
ライブラリは Haxe で書かれており、少なくとも次の言語に十分に翻訳できます。
daff
用に開発された非公式の Haxe ターゲットを使用)一部の翻訳はリリース ページで行われます。別の翻訳を作成するか、ソースからコンパイルするには、まず対象の言語の Haxe 言語の概要に従ってください。執筆時点では、OSX を使用している場合は、 brew install haxe
使用して haxe をインストールする必要があります。次に、次のいずれかを実行します。
make js
make php
make py
make java
make cs
make cpp
言語ごとに、 daff
ライブラリは、テーブル自体を作成するのではなく、作成したテーブルへのインターフェイスが渡されることを期待しています。これは、ある形式から別の形式への非効率的なコピーを避けるためです。これが面倒だと思う場合に使用できるSimpleTable
クラスが見つかります。
他の可能性:
daff
クラスは http://paulfitz.github.io/daff-doc/ で参照できます。 make
の使用に関するチュートリアル。 「git は行ごとに変更を考慮するため、カンマ区切りファイルとタブ区切りファイルの差分を見るのは不快になる場合があります。プログラム daff はこの問題を解決します。」 daff は MIT ライセンスに基づいて配布されています。