2つの文字列(バージョン1とバージョン2)を比較して、自分でhtmlに変換できる形式で違いを取得したいと思います。たとえば、スタックオーバーフローで投稿がどのように編集されたかを確認したり、svnがリビジョン...
フルマネージコードライブラリである必要があります。
このJavaScriptと同様ですが、サーバー側で実行する必要があります。
2つの文字列(バージョン1とバージョン2)を比較して、自分でhtmlに変換できる形式で違いを取得したいと思います。たとえば、スタックオーバーフローで投稿がどのように編集されたかを確認したり、svnがリビジョン...
フルマネージコードライブラリである必要があります。
このJavaScriptと同様ですが、サーバー側で実行する必要があります。
Google には似たようなものがあり、C# で利用できますが、詳しく調べていません。デモはかなりクールに見えます。
私はこれを行うクラス ライブラリを持っています。以下にリンクを投稿しますが、コンテンツに適しているかどうかを評価できるように、それがどのように機能するかについても投稿します。
以下で説明するすべてのことについて、各キャラクターをコレクションの要素と考えれば、以下に説明するアルゴリズムをあらゆるタイプのコンテンツに実装できることに注意してください。文字列の文字、テキスト行、ORM オブジェクトのコレクションなどです。
アルゴリズム全体は、最長共通部分文字列(LCS) を中心に展開し、再帰的なアプローチです。
最初に、アルゴリズムは 2 つの間の LCS を見つけようとします。これは、2 つのバージョン間で変更されていない/同一である最長のセクションになります。次に、アルゴリズムは、これら 2 つの部分が「整列」していると見なします。
たとえば、次のように 2 つの例の文字列が整列されます。
This long text has some text in the middle that will be found by LCS
This extra long text has some text in the middle that should be found by LCS
^-------- longest common substring --------^
次に、整列されたセクションの前の部分とその後の部分に再帰的に適用されます。
最終的な「結果」は次のようになります (文字列の 1 つに「存在しない」部分を示すためにアンダースコアを使用しています)。
This ______long text has some text in the middle that ______will be found by LCS
This extra long text has some text in the middle that should____ be found by LCS
次に、再帰的アプローチの一部として、再帰呼び出しの各レベルは「操作」のコレクションを返します。これは、LCS があるかどうか、またはいずれかの部分に欠落している部分があるかどうかに基づいて、次のように吐き出されます。
したがって、上記のテキストは次のようになります。
This
)extra_
(どうやらここのコード ブロックはスペースを削除します。アンダースコアはスペースです)long text has some text in the middle that_
)should
will
)_be found by LCS
)アルゴリズムのコアは非常にシンプルで、上記のテキストを使用して、必要に応じて自分で実装できるはずです。
私のクラス ライブラリにはいくつかの追加機能があります。特に、変更されたテキストに似たコンテンツなどを処理するため、削除または挿入操作だけでなく変更操作も取得できます。これは、次の場合に最も重要になります。テキストファイルの行など、何かのリストを比較しています。
クラス ライブラリは、GitHubの DiffLib にあります。Visual Studio 2010 に簡単にインストールできるように、Nuget にもあります。.NET 3.5 以降用に C# で記述されているため、.NET 3.5 および 4.0 で動作します。 、バイナリ リリースなので (すべてのソース コードは GitHub にあります)、VB.NET からも使用できます。