Dies ist eine Bibliothek zum Vergleichen von Tabellen, zum Erstellen einer Zusammenfassung ihrer Unterschiede und zum Verwenden dieser Zusammenfassung als Patch-Datei. Es ist für den Vergleich von Tabellen optimiert, die einen gemeinsamen Ursprung haben, also mehrere Versionen der „gleichen“ Tabelle.
Eine Live-Demo finden Sie unter:
https://paulfitz.github.io/daff/
Installieren Sie die Bibliothek für Ihre Lieblingssprache:
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
Weitere Übersetzungen finden Sie hier:
https://github.com/paulfitz/daff/releases
Oder verwenden Sie die Bibliothek, um CSV-Diffs auf Github über eine Chrome-Erweiterung anzuzeigen:
https://github.com/theodi/csvhub
Das von daff
verwendete Diff-Format wird hier angegeben:
http://paulfitz.github.io/daff-doc/spec.html
Diese Bibliothek ist eine abgespeckte Version der Coopy-Toolbox (siehe http://share.find.coop). Um Tabellen unterschiedlicher Herkunft, mit automatisch generierten IDs oder anderen Komplikationen zu vergleichen, schauen Sie sich die Coopy-Toolbox an.
Sie können daff
/ daff.py
/ daff.rb
als Dienstprogramm ausführen:
$ 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
Unterstützte Formate sind CSV, TSV, Sqlite (mit --input-format sqlite
oder der Erweiterung .sqlite
) und ndjson.
Führen Sie daff git csv
aus, um daff als Diff- und Merge-Handler für *.csv
Dateien in Ihrem Repository zu installieren. Führen Sie daff git
aus, um Anweisungen zur manuellen Ausführung zu erhalten. Ihre CSV-Unterschiede und -Zusammenführungen werden intelligenter, da Git plötzlich Zeilen und Spalten und nicht nur Zeilen versteht:
Sie können daff
als Bibliothek aus jeder unterstützten Sprache verwenden. Wir nehmen hier das Beispiel von Javascript. Um daff
auf einer Webseite zu verwenden, fügen Sie zunächst daff.js
ein:
< script src =" daff.js " > </ script >
Oder wenn Sie den Knoten außerhalb des Browsers verwenden:
var daff = require ( 'daff' ) ;
Der Konkretheit halber gehen wir davon aus, dass wir zwei Versionen einer Tabelle haben, data1
und 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' ]
] ;
Um diese Tabellen für die Bibliothek zugänglich zu machen, packen wir sie in daff.TableView
ein:
var table1 = new daff . TableView ( data1 ) ;
var table2 = new daff . TableView ( data2 ) ;
Wir können nun die Ausrichtung zwischen den Zeilen und Spalten in den beiden Tabellen berechnen:
var alignment = daff . compareTables ( table1 , table2 ) . align ( ) ;
Um einen Diff aus dem Alignment zu erzeugen, benötigen wir zunächst eine Tabelle für die Ausgabe:
var data_diff = [ ] ;
var table_diff = new daff . TableView ( data_diff ) ;
Standardoptionen für das Diff verwenden:
var flags = new daff . CompareFlags ( ) ;
var highlighter = new daff . TableDiff ( alignment , flags ) ;
highlighter . hilite ( table_diff ) ;
Der Diff liegt jetzt in data_diff
im Highlighter-Format vor, siehe Spezifikation hier:
http://paulfitz.github.io/daff-doc/spec.html
[ [ '!' , '' , '+++' , '' ] ,
[ '@@' , 'Country' , 'Code' , 'Capital' ] ,
[ '+' , 'Ireland' , 'ie' , 'Dublin' ] ,
[ '+' , 'France' , 'fr' , 'Paris' ] ,
[ '->' , 'Spain' , 'es' , 'Barcelona->Madrid' ] ,
[ '+++' , 'Germany' , 'de' , 'Berlin' ] ]
Zur Visualisierung möchten Sie dies möglicherweise in eine HTML-Tabelle mit entsprechenden Klassen für Zellen konvertieren, damit Sie Einfügungen, Löschungen, Aktualisierungen usw. farblich kennzeichnen können. Dies können Sie tun mit:
var diff2html = new daff . DiffRender ( ) ;
diff2html . render ( table_diff ) ;
var table_diff_html = diff2html . html ( ) ;
Für 3-Wege-Differenzen (d. h. Vergleich zweier Tabellen bei Kenntnis eines gemeinsamen Vorfahren) verwenden Sie daff.compareTables3
(geben Sie die Vorfahrentabelle als erstes Argument an).
So wenden Sie diesen Unterschied als Patch an:
var patcher = new daff . HighlightPatch ( table1 , table_diff ) ;
patcher . apply ( ) ;
// table1 should now equal table2
Für andere Sprachen finden Sie Beispielcode in den Paketen auf der Seite „Releases“.
Die daff
-Bibliothek ist in Haxe geschrieben, das einigermaßen gut in mindestens die folgenden Sprachen übersetzt werden kann:
daff
entwickelt wurde) Auf der Seite „Releases“ werden einige Übersetzungen für Sie erstellt. Um eine weitere Übersetzung anzufertigen oder aus der Quelle zu kompilieren, befolgen Sie zunächst die Haxe-Spracheinführung für die Sprache, die Sie interessiert. Zum Zeitpunkt des Verfassens dieses Artikels sollten Sie unter OSX haxe mit brew install haxe
installieren. Führen Sie dann einen der folgenden Schritte aus:
make js
make php
make py
make java
make cs
make cpp
Für jede Sprache erwartet die daff
-Bibliothek, dass sie eine Schnittstelle zu den von Ihnen erstellten Tabellen erhält, anstatt diese selbst zu erstellen. Dadurch sollen ineffiziente Kopien von einem Format in ein anderes vermieden werden. Sie werden eine SimpleTable
-Klasse finden, die Sie verwenden können, wenn Sie dies als umständlich empfinden.
Weitere Möglichkeiten:
daff
-Klassen unter http://paulfitz.github.io/daff-doc/ durchsuchen. make
for data, mit daff im Mix. „Da Git Änderungen zeilenweise berücksichtigt, kann es unangenehm werden, sich die Unterschiede zwischen durch Kommas und Tabulatoren getrennten Dateien anzusehen. Das Programm daff behebt dieses Problem.“ daff wird unter der MIT-Lizenz vertrieben.