2009-12-22 101 views
1

是否有diff工具,允許我編寫正則表達式來刪除差異的一行?可配置的免費差異工具?

一樣,看到兩行:

this.Visible = true; 
Visible = true; 

,我還可以寫一個表達式,使得如果線差正好是this忽略的差異。

我該怎麼做呢?

我給你再舉一個例子。像System.ExceptionException這兩個對我來說都是一樣的,我不想在diff中顯示它們。

+0

,而不是強制一個diff工具做什麼它應該做的(告訴你什麼是不同的)完全相反,依靠這樣的工具的可用性,爲什麼不使用一個簡單的工具,像sed或M4修補文件第一? – z5h 2009-12-22 19:48:56

+0

修補文件會改變內容,您將如何部分修補文件,並非所有這些或系統都被刪除。我只是想忽略導致任何差異的那些。 – 2009-12-22 20:10:59

+2

我會考慮的另一件事是,這只是一個不好的做法。 this.xxx與xxx不同。第一個獲取當前對象的xxx屬性,第二個獲取最近範圍內的xxx。由於忽略差異,可能會有一個錯誤。這似乎是一個不好的習慣,進入。無論如何,找到解決方案的好運氣。 – z5h 2009-12-22 20:15:34

回答

0

雖然Beyond Compare和Araxis都具有此功能,但我無法在任何軟件中找到該功能。

從WinMerge維基看來,它們將不再支持插件或任何此類新功能。太糟糕了。

3

你可以用KDiff3來做到這一點。請參閱Preprocessor Commands的文檔部分。

更新:我看到你有一個似乎需要語義差異程序的進一步請求。有關建議,請參閱Semantic Diff Utilities

+0

你能解釋更多,因爲我猜預處理器的整條生產線相匹配,並且您不能指定不同的是這個時候忽略。 – 2009-12-22 18:25:12

+0

對,你不能直接說「忽略這種差異」。但是,您可以對輸入進行標準化,以避免差異出現。例如,要忽略輸入中字母的大小寫,可以使用「行匹配預處理器命令」將所有大寫字符轉換爲小寫字母。舉個例子,你可以使用相同的過濾器從輸入行中刪除'this.'的所有實例。 – 2009-12-22 18:30:35

+0

這會給完全錯誤的結果,這不是我的問題。我想WinMerge也有線路過濾功能。我對差分過濾感興趣。 – 2009-12-22 18:32:15

0

Notepad++有一個比較插件,它非常易於配置。來自SourceGear的

+1

你能告訴我怎麼做,在記事本++ – 2009-12-22 18:19:47

+0

後您安裝記事本+ +,去「插件」 - >「比較」,你會看到一些選項供你配置,或者你可以選擇第一個選項「比較」(獎勵:Alt + D)來執行比較。 – 2009-12-22 18:21:36

+1

我不認爲你會得到這個問題。有沒有這樣的選項,我可以設置正則表達式。 – 2009-12-22 18:30:50

1

DiffMerge支持此操作。您需要創建一個與正在合併或編輯默認規則集的文件相匹配的規則集。在規則集中,將模式添加到要忽略的行的屬性。請參閱聯機幫助中的Ommitted Lines屬性以獲取更多信息。

+0

錯誤答案(-1),選項在哪裏。請詳細說明如何忽略特定的差異。 – 2009-12-22 19:11:35

+0

這是更好嗎? – 2009-12-22 19:29:21

+0

已經嘗試過,這是行不通的。添加了這個[。]模式以及^(\ s)* this [。](。)* $,但沒有任何效果。 – 2009-12-22 19:41:52

1

我用過的最好的軟件比較軟件是Beyond Compare。有了它,你可以做到你所要求的:輸入一個regular expression告訴軟件忽略某些差異。但是,這不是免費的。

如果您確實需要免費應用程序,則可以嘗試WinMerge。不過,我並不是很喜歡這個界面。

+0

如何在BeyondCompare中做到這一點,我無法找到一個選項,界面非常混亂。 – 2009-12-22 20:11:41

+1

在版本2上,在「文件比較」中,轉到「工具」 - >「選擇規則」 - >「新規則」。然後進入重要性標籤,在不重要的文本上單擊「新建」,選擇「正則表達式」,然後選擇ta-da! – 2009-12-22 21:07:17

+0

如果您使用的是版本3,請告訴我,我將查找配置。 – 2009-12-22 21:09:33

0

如果你找不到一個現成的diff工具來做你想做的事,你可以自己寫。

Python有一個diff module用於編寫diff-like工具,它將處理差異算法的所有複雜性。他們有一個示例腳本,它將在60行代碼中以標準Unix diff/patch格式或並排HTML形式執行文件差異。

模塊中的差異可讓您定義「垃圾」過濾器,以預處理線條以刪除不希望包含在差異中的部分。這些是Python函數,所以你不限於正則表達式匹配。

我有一個快速重讀的文檔,並且過濾器只適用於忽略整行或單個字符,這不是你想要的。但是,您可以輕鬆預處理您輸入到差異中的數據,以刪除要忽略的文本。

0

如果你知道如何編寫JavaScript你可以插入有問題的正則表達式爲Pretty Diff工具的微小部分。該工具完全免費,代碼完全打開,內嵌文檔。

如果你想從個人定製添加到工具,除了特定的功能,請讓我知道,我會添加它。

+0

說實話,在任何意義上,它看起來都不是一個差異工具。一個好的工具是一個不需要任何時間學習的好工具,一個好的用戶界面就是:不要讓我思考。 – 2010-01-01 08:48:40

+0

你得到你所支付的。一個好的工具是一個寫得很好的文檔。 – 2010-01-01 15:29:52

0

嘗試GNU diffutils。如果你在Windows上,你可以從www.cygwin.com上以Cygwin分配GNU diff。

+0

不認爲它有什麼不同,它把整條線壓制成別人而不僅僅是差別。請糾正我,如果我錯了。 – 2010-01-01 08:45:39