2010-02-02 19 views
10

Đáng buồn thay, một dự án mà tôi đã làm gần đây có một lượng lớn mã sao chép và dán, ngay cả trong các tệp đơn lẻ. Có bất kỳ công cụ hoặc kỹ thuật nào có thể phát hiện trùng lặp hoặc gần trùng lặp trong một tệp không? Tôi có Beyond Compare 3 và nó hoạt động tốt để so sánh các tệp riêng biệt, nhưng tôi thua lỗ khi so sánh các tệp đơn lẻ.Loại bỏ sự sao chép mã trong một tệp đơn

Xin cảm ơn trước.

Edit:

Cảm ơn tất cả những công cụ tuyệt vời! Tôi chắc chắn sẽ kiểm tra chúng.

Dự án này là dự án ASP.NET/C#, nhưng tôi làm việc với nhiều ngôn ngữ bao gồm Java; Tôi quan tâm đến những công cụ nào là tốt nhất (cho bất kỳ ngôn ngữ nào) để loại bỏ trùng lặp.

+0

Các giải pháp hoàn toàn khác nhau cho các ngôn ngữ khác nhau. Gắn thẻ cho ASP.NET/C#. – Tronic

+0

Đúng, nhưng tôi muốn biết các công cụ tốt nhất cho các ngôn ngữ phổ biến nhất (vì tôi làm việc với nhiều ngôn ngữ cùng một lúc). Cảm ơn mặc dù. –

+0

Giải pháp CloneDR là * cùng * cho nhiều ngôn ngữ. CloneDR xử lý C#, Java, HTML và JavaScript, mà tôi nghĩ rằng bao gồm tình hình "ASP.NET" của OP khá tốt. –

Trả lời

0

Resharper thực hiện điều này automagically - nó cho thấy khi nó nghĩ rằng mã nên được tách ra thành một phương pháp, và sẽ làm quá trình chiết cho bạn

4

Check-out Atomiq. Nó tìm thấy mã trùng lặp là số nguyên tố để trích xuất đến một vị trí.

http://www.getatomiq.com/

+0

... cho .Net anyway. :) –

+0

CopyPasteKiller đã được đổi tên thành Atomiq và hiện là $ 30 (có vẻ hợp lý). http://nimblepros.com/products/atomiq.aspx –

0

Check-out PMD, một khi bạn đã cấu hình nó (đó là chút đơn giản), bạn có thể chạy nó copy paste detector để tìm mã trùng lặp.

1

Xem SD CloneDR, một công cụ để phát hiện mã sao chép-dán-chỉnh sửa bên trong và trên nhiều tệp. Nó phát hiện các bản sao chính xác, các bản sao đã được định dạng lại và các bản sao gần như bỏ lỡ với các số nhận dạng, chữ khác nhau và thậm chí các câu lệnh khác nhau.

CloneDR xử lý nhiều ngôn ngữ, bao gồm Java (1,4,1,5,1,6) và C# đặc biệt là lên tới C# 4.0. Bạn có thể xem các báo cáo phát hiện bản sao mẫu tại trang web, cũng bao gồm một báo cáo cho C#.

1

Bạn không nói ngôn ngữ bạn đang sử dụng, điều này sẽ ảnh hưởng đến những công cụ bạn có thể sử dụng.

Đối với Python có CloneDigger. Nó cũng hỗ trợ Java nhưng tôi đã không thử điều đó. Nó có thể tìm thấy sự sao chép mã cả với một tệp duy nhất và giữa các tệp và cung cấp cho bạn kết quả dưới dạng một báo cáo tương tự trong HTML.

0

Một với một số kỹ năng văn phòng có thể làm theo trình tự sau trong 1 phút:

  • sử dụng định dạng thông thường để thống nhất phong cách mã, tốt nhất là không có dòng gói
  • nuôi văn bản mã vào Microsoft Excel là một cột duy nhất
  • tìm kiếm và thay thế tất cả các không gian kép với một single và làm thay thế khác
  • loại cột

Tại thời điểm này, từ khóa cho các từ khóa trùng lặp sẽ được phát hiện tốt.Nhưng để đi xa hơn

  • add so sánh công thức để cột thứ 2 và ngược lại 3
  • sao chép và dán giá trị một lần nữa, sắp xếp và nhìn thấy những dòng lặp đi lặp lại nhất
0

Có một công cụ phân tích, được gọi là Simian mà tôi chưa thử. Giả sử nó có thể chạy trên bất kỳ loại văn bản nào và chỉ ra các mục trùng lặp. Nó có thể được sử dụng thông qua giao diện dòng lệnh.