Ini adalah perpustakaan untuk membandingkan tabel, membuat ringkasan perbedaannya, dan menggunakan ringkasan tersebut sebagai file patch. Ini dioptimalkan untuk membandingkan tabel yang memiliki asal usul yang sama, dengan kata lain beberapa versi dari tabel "sama".
Untuk demo langsung, lihat:
https://paulfitz.github.io/daff/
Instal perpustakaan untuk bahasa favorit Anda:
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
Terjemahan lain tersedia di sini:
https://github.com/paulfitz/daff/releases
Atau gunakan perpustakaan untuk melihat perbedaan csv di github melalui ekstensi chrome:
https://github.com/theodi/csvhub
Format diff yang digunakan oleh daff
ditentukan di sini:
http://paulfitz.github.io/daff-doc/spec.html
Pustaka ini adalah versi sederhana dari kotak peralatan coopy (lihat http://share.find.coop). Untuk membandingkan tabel dari asal yang berbeda, atau dengan ID yang dibuat secara otomatis, atau komplikasi lainnya, lihat kotak peralatan coopy.
Anda dapat menjalankan daff
/ daff.py
/ daff.rb
sebagai program utilitas:
$ 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
Format yang didukung adalah CSV, TSV, Sqlite (dengan --input-format sqlite
atau ekstensi .sqlite
), dan ndjson.
Jalankan daff git csv
untuk menginstal daff sebagai pengendali diff dan gabung untuk file *.csv
di repositori Anda. Jalankan daff git
untuk petunjuk melakukan ini secara manual. Perbedaan dan penggabungan CSV Anda akan menjadi lebih cerdas, karena git tiba-tiba akan memahami tentang baris dan kolom, bukan hanya baris:
Anda dapat menggunakan daff
sebagai perpustakaan dari bahasa apa pun yang didukung. Di sini kita ambil contoh Javascript. Untuk menggunakan daff
pada halaman web, sertakan daff.js
terlebih dahulu :
< script src =" daff.js " > </ script >
Atau jika menggunakan node di luar browser:
var daff = require ( 'daff' ) ;
Agar lebih konkrit, asumsikan kita mempunyai dua versi tabel, data1
dan 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' ]
] ;
Agar tabel tersebut dapat diakses oleh perpustakaan, kami membungkusnya dalam daff.TableView
:
var table1 = new daff . TableView ( data1 ) ;
var table2 = new daff . TableView ( data2 ) ;
Sekarang kita dapat menghitung perataan antara baris dan kolom pada dua tabel:
var alignment = daff . compareTables ( table1 , table2 ) . align ( ) ;
Untuk menghasilkan perbedaan dari perataan, pertama-tama kita memerlukan tabel untuk keluarannya:
var data_diff = [ ] ;
var table_diff = new daff . TableView ( data_diff ) ;
Menggunakan opsi default untuk diff:
var flags = new daff . CompareFlags ( ) ;
var highlighter = new daff . TableDiff ( alignment , flags ) ;
highlighter . hilite ( table_diff ) ;
Perbedaannya sekarang ada di data_diff
dalam format stabilo, lihat spesifikasinya di sini:
http://paulfitz.github.io/daff-doc/spec.html
[ [ '!' , '' , '+++' , '' ] ,
[ '@@' , 'Country' , 'Code' , 'Capital' ] ,
[ '+' , 'Ireland' , 'ie' , 'Dublin' ] ,
[ '+' , 'France' , 'fr' , 'Paris' ] ,
[ '->' , 'Spain' , 'es' , 'Barcelona->Madrid' ] ,
[ '+++' , 'Germany' , 'de' , 'Berlin' ] ]
Untuk visualisasi, Anda mungkin ingin mengonversinya menjadi tabel HTML dengan kelas sel yang sesuai sehingga Anda dapat menyisipkan, menghapus, memperbarui kode warna, dll. Anda dapat melakukannya dengan:
var diff2html = new daff . DiffRender ( ) ;
diff2html . render ( table_diff ) ;
var table_diff_html = diff2html . html ( ) ;
Untuk perbedaan 3 arah (yaitu, membandingkan dua tabel berdasarkan pengetahuan tentang nenek moyang yang sama) gunakan daff.compareTables3
(berikan tabel leluhur sebagai argumen pertama).
Berikut cara menerapkan perbedaan tersebut sebagai tambalan:
var patcher = new daff . HighlightPatch ( table1 , table_diff ) ;
patcher . apply ( ) ;
// table1 should now equal table2
Untuk bahasa lain, Anda harus menemukan kode contoh dalam paket di halaman Rilis.
Perpustakaan daff
ditulis dalam Haxe, yang dapat diterjemahkan dengan cukup baik setidaknya ke dalam bahasa berikut:
daff
) Beberapa terjemahan telah selesai untuk Anda di halaman Rilis. Untuk membuat terjemahan lain, atau mengkompilasi dari sumber, ikuti dulu pengenalan bahasa Haxe untuk bahasa yang Anda minati. Pada saat penulisan, jika Anda menggunakan OSX, Anda harus menginstal haxe menggunakan brew install haxe
. Kemudian lakukan salah satu dari:
make js
make php
make py
make java
make cs
make cpp
Untuk setiap bahasa, perpustakaan daff
mengharapkan untuk memberikan antarmuka ke tabel yang Anda buat, daripada membuatnya sendiri. Hal ini untuk menghindari penyalinan yang tidak efisien dari satu format ke format lainnya. Anda akan menemukan kelas SimpleTable
yang dapat Anda gunakan jika Anda merasa ini aneh.
Kemungkinan lain:
daff
di http://paulfitz.github.io/daff-doc/ make
for data, dengan daff dalam campurannya. "Karena git mempertimbangkan perubahan per baris, melihat perbedaan file yang dibatasi koma dan file yang dibatasi tab bisa menjadi menjengkelkan. Program daff memperbaiki masalah ini." daff didistribusikan di bawah Lisensi MIT.