2010-10-17 42 views
5

hãy tưởng tượng bạn có 2 texfiles (giả sử 500kB - 3 MB lớn): cái đầu tiên là bản gốc, thứ hai là bản cập nhật của bản gốc này. Làm thế nào tôi có thể tìm hiểu, những gì đã được thay đổi (chèn, xóa) và nơi thay đổi diễn ra (trong tập tin cập nhật so với bản gốc)?So sánh 2 tệp văn bản: thay đổi được thực hiện ở đâu và ở đâu?

  1. Có công cụ hoặc thư viện nào ở đâu đó không?
  2. Nằm lại chức năng này trong bất kỳ trình soạn thảo văn bản nổi tiếng nào?
  3. Có ai biết thuật toán không? Hoặc các phương pháp phổ biến để giải quyết nó trên quy mô lớn là gì?
  4. Bạn sẽ làm gì nếu gặp phải vấn đề này?

Thanx cho ý tưởng của bạn ...

+0

DiffMerge của souregear là miễn phí ... –

+0

@Mitch Wheat - Thanx, có vẻ đẹp ... – lyborko

Trả lời

1

Bạn có thể thử Notepad++ nó là một soạn thảo văn bản mã nguồn mở mà có một so sánh file cắm vào.

2

Những gì bạn đang mô tả âm thanh giống hệt như một diff công cụ kiểu. Loại chức năng này có sẵn trong nhiều trình chỉnh sửa văn bản nâng cao hơn.

+0

Một thời gian sau câu trả lời của bạn, tôi phát hiện ra rằng ít nhất Open Office có tính năng này ... Cảm ơn ... – lyborko

1

Có một extensive list of file comparison tools trên wikipedia.

Nếu bạn muốn thực hiện theo chương trình, tôi đã sử dụng SEDAWK trên các hệ thống Unix trước đây - và có các phiên bản cửa sổ. Về cơ bản, các loại ngôn ngữ xử lý tệp cho phép bạn đọc và so sánh các tệp văn bản theo từng dòng và sau đó cho phép bạn làm điều gì đó với sự khác biệt (ví dụ: lưu chúng vào tệp thứ ba).

+0

Cảm ơn rất nhiều về các liên kết ở trên. Tôi đã cố gắng phát triển công cụ nhỏ này một mình, nhưng dường như tôi khá khó khăn để phát minh lại những gì đã được phát minh từ lâu ... Tôi không chắc chắn bây giờ, nếu tôi thực hiện nó trong ứng dụng hoặc tôi sử dụng mỗi khi một số công cụ so sánh . – lyborko

0

Có công cụ hoặc thư viện nào ở đâu đó không?

Có rất nhiều. Hãy thử sử dụng diff, đó là tiện ích so sánh tệp dựa trên dòng lệnh hoạt động tốt cho các khác biệt nhỏ. Nhưng nếu hai tập tin khác nhau rất nhiều, nó sẽ rất khó để hiểu đầu ra của diff. Trong trường hợp đó, bạn có thể sử dụng các công cụ tìm kiếm tệp hình ảnh khác như diffmerge, Kompare hoặc vimdiff.

Nằm lại chức năng này trong bất kỳ trình soạn thảo văn bản nổi tiếng nào?

Nhiều biên tập viên hiện đại như vim, Eclipse có tính năng này diffing thị giác ..

Có ai biết một thuật toán? Hoặc các phương pháp phổ biến để giải quyết nó trên quy mô lớn là gì?

Nó dựa trên Longest common subsequence algorithm, thường được gọi là LCS.

LCS văn bản cũ và văn bản mới cung cấp phần không thay đổi. Vì vậy, các phần của văn bản cũ không phải là một phần của LCS là một phần đã được thay đổi.

Bạn sẽ làm gì nếu gặp phải vấn đề này?

Tôi muốn sử dụng một trong các công cụ tìm khác biệt được đề cập để xem những gì và nơi thay đổi được thực hiện.

0

Công cụ khác biệt unix có sự khác biệt từng dòng; có một công cụ GNU gọi là wdiff, nó sẽ thực hiện các khác biệt từng chữ một, và sẽ có sẵn dưới dạng một gói cho hầu hết các bản phân phối Linux hoặc Cygwin.

giấy tờ cổ điển trên các thuật toán là: