23

I am looking at http://code.google.com/p/google-diff-match-patch/ and have downloaded the file. When I look at it is 2 files

DiffMatchPatch.cs
DiffMatchPatchTest.cs

When I try to make a new object of DiffMatchPatch.cs I have to pass in some operation and string text.

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

In the demo they cross out the words that are different and that is what I am trying to achieve.

I am trying to compare 2 blocks of text on the server side finds the differences and send a email to the user with the file block of text to them like the end result is in the demo that I posted above.

So does anyone have a tutorial on how to use the C# version?

Sharpoint
  • 307
  • 1
  • 4
  • 8

3 Answers3

28

For reference, this is really easy:

var dmp = new diff_match_patch();
var diffs = dmp.diff_main(text1, text2);
var html = dmp.diff_prettyHtml(diffs);
ChrisR
  • 1,308
  • 1
  • 14
  • 27
  • 1
    What threw me off is that this code format looks like JavaScript and not C#. If anyone has the same issue, this code goes in your C# class. – Tot Zam Feb 24 '17 at 18:45
  • how do i use the html on c# wpf? –  Nov 27 '19 at 03:14
  • Is there any way I can generate a pdf and display the comparison results in that instead of the HTML file? – user8657231 Jan 31 '21 at 02:13
9

Implementation with current version(2.1.0) would look like this

var dmp = DiffMatchPatchModule.Default;
var diffs = dmp.DiffMain(text1, text2);
var html = dmp.DiffPrettyHtml(diffs);
maxlego
  • 4,864
  • 3
  • 31
  • 38
  • Warning! now 'class' is not instantiated, it uses static reference apart of methods changing names. Took me some time to realize the difference in initialization. Looks like one can use only one diff at a time. Documentation example on DMP project git is outdated (https://github.com/google/diff-match-patch/wiki/Language:-C%23) and new implementation looks more like wrapper than fulfilling the claim that same API is used. Thank you @maxlego ! – ljgww Nov 12 '18 at 09:05
  • I'm assuming you refer to this port: https://github.com/pocketberserker/Diff.Match.Patch – Tal Aloni Nov 18 '18 at 10:52
  • How would you change the MatchThreshold while doing a dmp.MatchMain? I can see MatchThreshold but it is a read only value? – Lynchie Jul 26 '20 at 13:29
2

For anyone who came across this thread because of the title and expected an explanation on how to use the Google Diff-Match-Patch algorithm via the https://github.com/pocketberserker/Diff.Match.Patch library found on NuGet, to create a diff string, so he can send the change somewhere (e.g. via websocket) and restore it at the destination based on the old value and the diff string, that would work like this:

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);
RonnyR
  • 210
  • 1
  • 5