2016-02-03 8 views
15

GoogleのDiffMatchPatchライブラリのdiff_mainメソッドを使用して、自分のアプリで使用する差分を取得しています。このような場合を考えてみましょう:Google Diff Matchパッチの作成方法は、文字列の最後に変更が優先されますか?

旧文字列:

Tracker.Dependency.prototype.changed = function() { 
    for (var id in this._dependentsById) 
    this._dependentsById[id]._compute(); 
}; 

新しい文字列:

Tracker.Dependency.prototype.changed = function() { 
    for (var id in this._dependentsById) 
    this._dependentsById[id]._compute(); 
}; 

Tracker.autorun = function (f) { 
    constructingComputation = true; 
    var c = new Tracker.Computation(f); 
    return c; 
}; 

加えて私が手DIFFは次のとおりです。

; 
}; 

Tracker.autorun = function (f) { 
    constructingComputation = true; 
    var c = new Tracker.Computation(f); 
    return c 

それは人間の消費のためにそれを思われるのに対しより合理的な違いは、

です。
Tracker.autorun = function (f) { 
    constructingComputation = true; 
    var c = new Tracker.Computation(f); 
    return c; 
}; 

DiffMatchPatchが最初の結果ではなく2番目の結果を生成する方法はありますか?

あなたはここでは例を見ることができます:https://jsfiddle.net/puje78vL/1/

+2

フィドルを共有したいですか? – Siddharth

+1

@Siddharth done –

+2

この詳細をもっと早く更新していない皆さん、ごめんなさい。私は非常に病気で、今まで私のラップトップには行きませんでした。 –

答えて

5

を私は(あなたが質問タグに基づいて、Javascriptのバージョンをしたいと仮定して)ライブラリの作者example pageに基づいてJSFiddleを作成しました。

そして、このコードを使用すると、あなたが期待するものを私に与える:

var dmp = new diff_match_patch(); 

function launch() { 
    var text1 = document.getElementById('text1').value; 
    var text2 = document.getElementById('text2').value; 

    var d = dmp.diff_main(text1, text2); 
    var ds = dmp.diff_prettyHtml(d); 

    document.getElementById('outputdiv').innerHTML = ds; 
} 

あなたもdiff_mainはあなたが何を返していることを見ることができます。また、コンソールを見て、(配列)生の答えを見ることができます期待している。違うことをしていますか?もしそうなら、あなたのコードを共有してください。

新情報

今、あなたは私があなたのより良い答えを与えることができ、フルテキストを提供していること:あなたが見ている結果はOKですが、それはアルゴリズムが

私の作品だけの方法であります何が起こっているのか、これをどう解決するのかをあなたに説明しようとします。のは、各テキストの最後の部分を見てみましょう:

  1. 最終:

    テキスト1

    Tracker.Dependency.prototype.changed = function() { 
        for (var id in this._dependentsById) 
        this._dependentsById[id]._compute(); 
    }; 
    

    テキスト2

    Tracker.Dependency.prototype.changed = function() { 
        for (var id in this._dependentsById) 
        this._dependentsById[id]._compute(); 
    }; 
    
    Tracker.autorun = function (f) { 
        constructingComputation = true; 
        var c = new Tracker.Computation(f); 
        return c; 
    }; 
    

    は、この通知をします}; changedの機能はです。テキスト1の後ろにはキャリッジリターンがありません。

  2. 最後の}; changedの機能はです。テキスト2の後ろにはキャリッジリターンがあります。
  3. 最後の};autorunの機能はです。テキスト2の後ろにはキャリッジリターンがありません。

ので、差分を計算するアルゴリズムが追加されたテキストとして2を残し、31と一致します。これが、TOUがその出力を得ている理由です。

今すぐ希望の出力を得るには、12を一致させる必要があります。

Tracker.Dependency.prototype.changed = function() { 
    for (var id in this._dependentsById) 
    this._dependentsById[id]._compute(); 
};[PRESS ENTER HERE TO ADD NEW LINE] 

テイク通知あなたはこのテキストを使用している場合、アルゴリズムが正しく動作することをIとして(:これは、あなたが更新ツアーJSFIddle上で見ることができるようテキスト1の最後に新しい空の行を追加します意味します私の元々の答えでshowd)。この錯乱が起こり始めるときに、何らかのテキストを追加した後で、理由は分かりません。

+1

ええ、私がこのような孤立したテストケースを作ったとき、うまくいきました。私はもう少しコードを調べなければなりませんが、私は最後の数日間はひどい病気でした:( –

+1

あなたのコードや環境などを提供する必要があります。そうでなければ、私たちはもう助けることができません。 –

+1

私は –

関連する問題