นี่คือไลบรารีสำหรับการเปรียบเทียบตาราง สร้างการสรุปความแตกต่าง และใช้การสรุปดังกล่าวเป็นไฟล์แพตช์ ได้รับการปรับให้เหมาะสมสำหรับการเปรียบเทียบตารางที่มีต้นกำเนิดร่วมกัน กล่าวคือ ตาราง "เดียวกัน" หลายเวอร์ชัน
สำหรับการสาธิตสด โปรดดู:
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
หรือใช้ไลบรารีเพื่อดู csv diffs บน github ผ่านส่วนขยายของ Chrome:
https://github.com/theodi/csvhub
รูปแบบต่างที่ daff
ใช้ระบุไว้ที่นี่:
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
เพื่อติดตั้ง daff เป็น diff และรวมตัวจัดการสำหรับไฟล์ *.csv
ในที่เก็บของคุณ เรียกใช้ daff git
เพื่อดูคำแนะนำในการดำเนินการด้วยตนเอง ความแตกต่าง CSV ของคุณและการผสานจะฉลาดขึ้น เนื่องจาก git จะเข้าใจเกี่ยวกับแถวและคอลัมน์ในทันที ไม่ใช่แค่บรรทัด:
คุณสามารถใช้ daff
เป็นห้องสมุดจากภาษาที่รองรับ เรานำตัวอย่างของ Javascript ที่นี่ หากต้องการใช้ daff
บนหน้าเว็บ ก่อนอื่นให้รวม daff.js
:
< script src =" daff.js " > </ script >
หรือหากใช้โหนดนอกเบราว์เซอร์:
var daff = require ( 'daff' ) ;
เพื่อความเป็นรูปธรรม สมมติว่าเรามีตารางสองเวอร์ชัน 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 ) ;
ตอนนี้เราสามารถคำนวณการจัดตำแหน่งระหว่างแถวและคอลัมน์ในสองตารางได้แล้ว:
var alignment = daff . compareTables ( table1 , table2 ) . align ( ) ;
ในการสร้างความแตกต่างจากการจัดตำแหน่ง อันดับแรกเราต้องมีตารางสำหรับเอาต์พุต:
var data_diff = [ ] ;
var table_diff = new daff . TableView ( data_diff ) ;
การใช้ตัวเลือกเริ่มต้นสำหรับส่วนต่าง:
var flags = new daff . CompareFlags ( ) ;
var highlighter = new daff . TableDiff ( alignment , flags ) ;
highlighter . hilite ( table_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 ทาง (นั่นคือ การเปรียบเทียบสองตารางที่ให้ความรู้เกี่ยวกับบรรพบุรุษร่วมกัน) ให้ใช้ daff.compareTables3
(ให้ตารางบรรพบุรุษเป็นอาร์กิวเมนต์แรก)
ต่อไปนี้คือวิธีใช้ความแตกต่างดังกล่าวเป็นแพตช์:
var patcher = new daff . HighlightPatch ( table1 , table_diff ) ;
patcher . apply ( ) ;
// table1 should now equal table2
สำหรับภาษาอื่นๆ คุณควรค้นหาโค้ดตัวอย่างในแพ็คเกจบนหน้าการเผยแพร่
ห้องสมุด daff
เขียนด้วยภาษา Haxe ซึ่งสามารถแปลเป็นภาษาต่อไปนี้ได้ดีพอสมควร:
daff
) มีการแปลบางส่วนให้คุณแล้วในหน้าการเผยแพร่ หากต้องการแปลอีกครั้งหรือรวบรวมจากแหล่งที่มา ให้ทำตามการแนะนำภาษา Haxe สำหรับภาษาที่คุณสนใจก่อน ในขณะที่เขียน หากคุณใช้ OSX คุณควรติดตั้ง haxe โดยใช้ brew install haxe
จากนั้นทำอย่างใดอย่างหนึ่ง:
make js
make php
make py
make java
make cs
make cpp
สำหรับแต่ละภาษา ไลบรารี daff
คาดว่าจะมีส่วนต่อประสานกับตารางที่คุณสร้างขึ้น แทนที่จะสร้างขึ้นเอง ทั้งนี้เพื่อหลีกเลี่ยงการคัดลอกที่ไม่มีประสิทธิภาพจากรูปแบบหนึ่งไปยังอีกรูปแบบหนึ่ง คุณจะพบคลาส SimpleTable
ที่คุณสามารถใช้หากคุณพบว่าสิ่งนี้น่าอึดอัดใจ
ความเป็นไปได้อื่นๆ:
daff
ได้ที่ http://paulfitz.github.io/daff-doc/ make
for data โดยมี daff ผสมอยู่ "เนื่องจาก git พิจารณาการเปลี่ยนแปลงแบบต่อบรรทัด การดูส่วนต่างของไฟล์ที่คั่นด้วยเครื่องหมายจุลภาคและที่คั่นด้วยแท็บอาจเป็นเรื่องน่ารังเกียจ โปรแกรม Daff จะช่วยแก้ไขปัญหานี้ได้" daff ได้รับการเผยแพร่ภายใต้ใบอนุญาต MIT