هذه مكتبة لمقارنة الجداول، وإنتاج ملخص لاختلافاتها، واستخدام هذا الملخص كملف تصحيح. تم تحسينه لمقارنة الجداول التي تشترك في أصل مشترك، وبعبارة أخرى، إصدارات متعددة من الجدول "نفسه".
للحصول على عرض توضيحي مباشر، راجع:
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 على جيثب عبر ملحق Chrome:
https://github.com/theodi/csvhub
تم تحديد تنسيق الفرق الذي يستخدمه daff
هنا:
http://paulfitz.github.io/daff-doc/spec.html
هذه المكتبة عبارة عن نسخة مجردة من صندوق أدوات النسخ (راجع http://share.find.coop). لمقارنة الجداول من أصول مختلفة، أو باستخدام معرفات يتم إنشاؤها تلقائيًا، أو تعقيدات أخرى، قم بمراجعة مربع أدوات النسخ.
يمكنك تشغيل 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 كمعالج فرق ودمج لملفات *.csv
في مستودعك. قم بتشغيل daff git
للحصول على تعليمات حول القيام بذلك يدويًا. ستصبح عمليات الدمج والاختلاف في ملف CSV أكثر ذكاءً، نظرًا لأن git سوف يفهم فجأة الصفوف والأعمدة، وليس الخطوط فقط:
يمكنك استخدام daff
كمكتبة من أي لغة مدعومة. نأخذ هنا مثال جافا سكريبت. لاستخدام 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 ( ) ;
بالنسبة للاختلافات ثلاثية الاتجاهات (أي مقارنة جدولين بالنظر إلى معرفة سلف مشترك) استخدم daff.compareTables3
(أعط جدول السلف كوسيطة أولى).
إليك كيفية تطبيق هذا الاختلاف كتصحيح:
var patcher = new daff . HighlightPatch ( table1 , table_diff ) ;
patcher . apply ( ) ;
// table1 should now equal table2
بالنسبة للغات الأخرى، يجب أن تجد نموذج التعليمات البرمجية في الحزم الموجودة في صفحة الإصدارات.
مكتبة daff
مكتوبة باللغة الهكسية، والتي يمكن ترجمتها بشكل جيد إلى اللغات التالية على الأقل:
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
للبيانات، مع daff في المزيج. "نظرًا لأن git يأخذ في الاعتبار التغييرات على أساس كل سطر، فإن النظر إلى الاختلافات بين الملفات المحددة بفواصل وعلامات التبويب يمكن أن يكون أمرًا بغيضًا. يعمل برنامج daff على إصلاح هذه المشكلة." يتم توزيع داف بموجب ترخيص معهد ماساتشوستس للتكنولوجيا.