이는 테이블을 비교하고, 차이점에 대한 요약을 생성하고, 이러한 요약을 패치 파일로 사용하기 위한 라이브러리입니다. 이는 공통 원본을 공유하는 테이블, 즉 "동일한" 테이블의 여러 버전을 비교하는 데 최적화되어 있습니다.
라이브 데모를 보려면 다음을 참조하세요.
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 diff를 볼 수 있습니다.
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
실행하여 daff를 저장소의 *.csv
파일에 대한 diff 및 병합 처리기로 설치하세요. 이 작업을 수동으로 수행하는 방법에 대한 지침을 보려면 daff git
실행하세요. git이 라인뿐만 아니라 행과 열에 대해서도 갑자기 이해하게 되므로 CSV 비교 및 병합이 더욱 스마트해집니다.
지원되는 모든 언어에서 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 ) ;
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 타겟 사용) 일부 번역은 릴리스 페이지에서 수행됩니다. 다른 번역을 하거나 소스에서 컴파일하려면 먼저 관심 있는 언어에 대한 Haxe 언어 소개를 따르세요. 이 글을 쓰는 시점에서, OSX를 사용한다면, brew install haxe
사용하여 haxe를 설치해야 합니다. 그런 다음 다음 중 하나를 수행합니다.
make js
make php
make py
make java
make cs
make cpp
각 언어에 대해 daff
라이브러리는 테이블 자체를 생성하는 대신 사용자가 생성한 테이블에 대한 인터페이스를 제공받기를 기대합니다. 이는 한 형식에서 다른 형식으로의 비효율적인 복사를 방지하기 위한 것입니다. 이것이 어색하다고 생각되면 사용할 수 있는 SimpleTable
클래스를 찾을 수 있습니다.
다른 가능성:
daff
클래스를 찾아볼 수 있습니다. make
사용하는 방법에 대한 튜토리얼입니다. "git은 행별로 변경 사항을 고려하기 때문에 쉼표로 구분된 파일과 탭으로 구분된 파일의 차이를 보는 것은 불쾌할 수 있습니다. 프로그램 daff는 이 문제를 해결합니다." daff는 MIT 라이센스에 따라 배포됩니다.