Vergleichen von zwei rich-text-Feld Inhalte und markieren Sie das Zeichen, das geändert werden?
Code, den ich verwendet für das Lesen der 2 richtextbox Inhalt sind wie folgt:
richTextBox1.Text = File.ReadAllText(tfsVersionFilePath);
richTextBox2.Text = File.ReadAllText(dbVersionFilePath);
Nun, ich brauche, um die beiden zu vergleichen rich-text-Feld Inhalte und markieren Sie die Zeichen, die geändert werden, in beiden richtextboxes. Ziel ist es, die Unterschiede und markieren Sie die Zeichen as in TFS
(Vergleich der Dateien) durch c# - Anwendung. Danke.
Edit:
int length = (richTextBox1.Text.Length > richTextBox2.Text.Length) ? richTextBox1.Text.Length : richTextBox2.Text.Length;
for (int i = 0; i < length; i++)
{
if (richTextBox1.Text[i] != richTextBox2.Text[i])
{
/* and then start your highlight selection here,
this is where some difference between the two rich
text boxes begins */
richTextBox1.Select(i, 1);
richTextBox1.SelectionColor = System.Drawing.Color.Yellow;
richTextBox1.SelectionBackColor = System.Drawing.Color.Red;
}
}
Was ich verstanden habe, von Debuggen ist, dass die Select
oder SelectionColor
oder SelectionBackColor
Methode der richTextBox1 zeigen Sie den text-cursor erhöhte sich auf 7 Positionen nach bestimmten Linien durchgeführt. Wie pflegen Sie die cursor-position der richTextBox1 ?
- "markieren Sie die Zeichen, die geändert werden," Wie die Zeichen, die ware zu ändern, während vergleichen?
- möchten Sie prüfen, ob Wort für Wort oder Buchstabe für Buchstabe?
- Neueste Version in einer richtextbox an und Vorherige version in einem anderen rich-text-Feld. Wie in TFS auch wenn 50 geändert auf 60, dann wird es zu markieren
5
und6
in beiden Versionen.Ebenso, Sujith. Danke. - okey dann hat, was der erwartete output?
- Erwartete Ausgabe an dieser Stelle muss ich markieren Sie die geänderten Zeichen
and/or
Worte. Danke. - Sie möchten hier hervorheben "Letzte & Voriges",nicht wahr?
- Ja, Genau.
- Werfen Sie einen Blick auf stackoverflow.com/questions/1509771/...
- Ich bin nicht in der Lage zu führen Sie die Anwendung aus dem Quellcode, wurde in dem oben genannten link
diff.net
. Werfen viele Fehler, fast versucht, den Quell-code ausgeführt werden, der für mindestens 3 Stunden. Aber mit der app(installer) in den heruntergeladenen Ordner, ich habe versucht, und es gibt mir das erwartete Ergebnis und die Unterschiede, die Anzeige war in Ordnung. Nun, ich weiß nicht, wie es weiter geht, Danke.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstmal großes Lob an ArtyomZzz für den Hinweis auf die hervorragende Quelle von DiffMatchPatch!
Hier ist ein Stück code, das malen werden die geänderten Zeichen in zwei RichTextboxes auf eine Schaltfläche klicken.
Zuerst laden Sie die diff-match-patchsource. (!Siehe update unten!) Aus der zip-Datei kopieren 'DiffMatchPatch.cs' und auch 'KOPIEREN' zu Ihrem Projekt und umfassen die cs-Datei in Ihr Projekt. Auch fügen Sie den namespace für die Verwendung von Klauseln.
Zuerst war ich versucht, auch die Farbe der veränderten Zeilen als ganzes in eine hellere Farbe, aber das kostet deutlich mehr Arbeit, kann nicht getan werden (die Färbung der ganzen Linie, im Gegensatz zu nur der Teil mit Inhalt), und war nicht Teil Ihrer Frage in den ersten Platz..
Hinweis: Es gibt vier verschiedene post-diff-cleanup-Methoden. Welche am besten geeignet ist, hängt von der Eingabe und Zweck. Ich schlage vor, Sie versuchen, die
cleanupSemanticLossless
. Ich habe einen 3. screenshot zeigt, wie diese Bereinigung funktioniertHier ist ein screenshot der Ausgabe:
Und eine der neuen version:
Screenshot nach cleanupSemanticLossless:
Update: Die Quellen zu haben scheinen verschoben. Diese sollte helfen..
richtextboxes
und keine Unterschiede vorhanden. Also, es sollte keine highlight, aber es ist zeigt die highlight bei einigen Texten. Bitte erklären. Danke.Chunk
imList<Chunk> chunklist1;
DiffMatchPatch
, und ich bin in der Lage zu verwendenDiff
durch, aberchunk
es wird gefragt, für die Referenz. Danke.This or this should help..
. Beidethis
Punkt den gleichen link. Ist es ein Tippfehler?So wie ich das verstehe problem ist:
Der einfachste Weg ist die Verwendung von https://github.com/curran/google-diff-match-patch (Vorherige link war https://code.google.com/p/google-diff-match-patch/, Dank Paolo Costa für Kommentar)
Es kann Dateien vergleichen (mit mehreren Optionen, die Sie einstellen können) und die Formular-Html-Code für Sie (mit diffs). Auch Sie können schreiben Sie Ihre eigene Logik für die Ausgabe (html ist nicht passend für Sie) - siehe DiffMatchPatch.diff_prettyHtml (...) - Methode (es ist sehr einfach).
p.s.
nicht "am besten" - Ansatz für die Datei-Vergleich. Es ist komplexer.
google diff
Sah ich schon die demo, die Sie zur Verfügung gestellt. Es zeigt nicht die Unterschiede, wieTFS
Dateien vergleichen und es zeigt die Unterschiede unten. Auch, können Sie mir empfehlen ein guter Ansatz für die Datei Vergleich. Danke.google diff
und ich bekam das erwartete Ergebnis zur Darstellung von Differenzen und als highlight, gefolgt von TaW Antwort.Nur laut denken hier, sondern ein anderer Weg, es zu tun wäre :
Dies würde traverse sowohl rich-text-Felder zur gleichen Zeit, und markieren Sie die Unterschiede. Klingt wie es möglicherweise mehr von dem, was du bist suchen für.
Verwenden Sie den link, den ich gepostet aus meiner anderen Antwort, um Ihnen zu helfen zusammen mit der Hervorhebung bit. Dieses kleine Stück code, das sollte helfen mit dem text-Vergleich.
if
Zustand war wie folgtrichTextBox1.Select(i, 1); richTextBox1.SelectionColor = System.Drawing.Color.Yellow; richTextBox1.SelectionBackColor = System.Drawing.Color.Red;
Select
oderSelectionColor
oderSelectionBackColor
Methode derrichTextBox1
zeigen Sie den text-cursor erhöhte sich um 7 Positionen nach bestimmten Linien durchgeführt..