如何使用google-diff-match-patch C#库?

23

我正在查看http://code.google.com/p/google-diff-match-patch/,并已下载该文件。当我查看时,它有2个文件

DiffMatchPatch.cs
DiffMatchPatchTest.cs

当我尝试创建一个DiffMatchPatch.cs的新对象时,我需要传入一些操作和字符串文本。

http://neil.fraser.name/software/diff_match_patch/svn/trunk/demos/demo_diff.html

在演示中,他们划掉了不同的单词,这就是我想要实现的。
我正在尝试比较服务器端的2个文本块,找到差异并向用户发送包含文件文本块的电子邮件,就像我上面发布的演示中的最终结果一样。
那么,有没有关于如何使用C#版本的教程呢?

@ Henrik P. Hessel - 我不知道如何使用类中的方法。它们有 diff_match_patch、Diff 或 Patch,每个都有一些东西,但我不知道该用什么。 - Sharpoint
2
https://code.google.com/p/google-diff-match-patch/wiki/API - CAD bloke
注意:上面的链接现在已经失效。 - ScottishTapWater
上面的链接不再失效了...我刚试了一下,它可以工作。 - BVernon
3个回答

28

参考一下,这非常容易:

var dmp = new diff_match_patch();
var diffs = dmp.diff_main(text1, text2);
var html = dmp.diff_prettyHtml(diffs);

1
让我困惑的是,这段代码的格式看起来像JavaScript而不是C#。如果有人遇到相同的问题,这段代码应该放在你的C#类中。 - Tot Zam
如何在C# WPF中使用HTML? - user11960582
有没有方法可以生成PDF并在其中显示比较结果,而不是HTML文件? - user8657231

9

使用当前版本(2.1.0)的实现应该如下:

var dmp = DiffMatchPatchModule.Default;
var diffs = dmp.DiffMain(text1, text2);
var html = dmp.DiffPrettyHtml(diffs);

警告!现在'class'没有实例化,它使用静态引用除了方法改变名称。花了我一些时间才意识到初始化的差异。看起来一次只能使用一个diff。DMP项目git上的文档示例已过时(https://github.com/google/diff-match-patch/wiki/Language:-C%23),新的实现更像是包装器,而不是实现相同API的声明。谢谢@maxlego! - ljgww
我想你是指这个端口:https://github.com/pocketberserker/Diff.Match.Patch - Tal Aloni
在执行dmp.MatchMain时,您如何更改MatchThreshold?我可以看到MatchThreshold,但它是只读的值? - Lynchie

2
对于因标题而进入此线程并期望了解如何使用Google Diff-Match-Patch算法通过NuGet上的https://github.com/pocketberserker/Diff.Match.Patch库创建差异字符串的人,以便可以将更改发送到某个地方(例如通过websocket),并基于旧值和差异字符串在目标处还原它,操作步骤如下:
var oldValue = "Test old text.";
var newValue = "Test new text.";

// create diff string
var dmp = DiffMatchPatch.DiffMatchPatchModule.Default;
var diffs = dmp.DiffMain(oldValue, newValue);
var srcDelta = dmp.DiffToDelta(diffs);

// restore from diff
var dmp = DiffMatchPatch.DiffMatchPatchModule.Default;
var dstDelta = dmp.DiffFromDelta(oldValue, srcDelta);
var restoredNewValue = dmp.DiffText2(dstDelta);

谢谢,这正是我想要的。 - Ionut Enache

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接