【问题标题】:How to use google-diff-match-patch C# library?如何使用 google-diff-match-patch C# 库?
【发布时间】:2011-05-18 22:17:35
【问题描述】:

我正在查看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,每个都有东西,但我不知道该用什么。
  • 注意:以上链接现已失效
  • 以上链接不再失效...刚刚尝试过,它可以工作。

标签: c# diff patch match


【解决方案1】:

作为参考,这很容易:

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

【讨论】:

  • 让我失望的是这种代码格式看起来像 JavaScript 而不是 C#。如果有人有同样的问题,这段代码会放在你的 C# 类中。
  • 如何在 c# wpf 上使用 html?
  • 有什么方法可以生成 pdf 并在其中显示比较结果而不是 HTML 文件?
【解决方案2】:

当前版本(2.1.0)的实现如下所示

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

【讨论】:

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

对于任何因标题而遇到此线程并期望通过 NuGet 上的 https://github.com/pocketberserker/Diff.Match.Patch 库使用 Google 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);

【讨论】:

  • 谢谢,这正是我想要的
猜你喜欢
  • 1970-01-01
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多