Vergleichen von 2 (oder 3 Dateien, wenn möglich) „Zeile für Zeile“

Vergleichen von 2 (oder 3 Dateien, wenn möglich) „Zeile für Zeile“

Ich möchte die Unterschiede zwischen 2 (oder wenn möglich 3) Dateien Zeile für Zeile herausfinden. Diff-Dienstprogramme können dies tun, liefern jedoch ungenaue Ergebnisse. Denn 2 Dateien haben genau die gleiche Zeilenanzahl, nämlich „134“. Aber Diff gibt mir „Hinzugefügte Zeilen“ und „Entfernte Zeilen“. Dies ist jedoch falsch, da sie genau die gleiche Zeilenanzahl haben, es gibt keine hinzugefügten oder entfernten Zeilen.

In den Textdateien, in denen ich die Unterschiede ermitteln möchte, sind nur Zahlen geschrieben. Vielleicht schlägt der Algorithmus deshalb fehl. Ich konnte keine Option finden, um das zu verhindern. Aber vielleicht irre ich mich auch. Es sollte eine Option dafür geben, aber ich konnte sie auch nicht finden.

Das ist, was ich bekomme (5am.txt vs. 6am.txt, es gibt ein großes Problem): http://img26.imageshack.us/img26/7049/wrongp.png

Das ist, was ich will (6am.txt vs. 7am.txt, hat immer noch Probleme): http://img402.imageshack.us/img402/5421/semiright.png

Bearbeiten:

Nachdem ich herausgefunden hatte, dass es dafür kein Dienstprogramm gibt, habe ich es selbst in die Hand genommen. Ich habe fast dasselbe gemacht wie RedGrittyBrick. Dieses Skript imitiert das Diff-Dienstprogramm, sodass ich (oder Sie) es mit diff2html verwenden können.

Um es mit diff2html zu verwenden, ändern Sie einfach die Zeile

diff_stdout = os.popen("diff %s" % string.join(argv[1:]), "r")

Zu

diff_stdout = os.popen("script.py %s" % string.join(argv[1:]), "r")

und benennen Sie dieses Skript wie Sie möchten (mussPython 2.xauszuführen, wie diff2html):

import sys

f1=open(sys.argv[1],"r")
f1_read=f1.readlines()
f1.close()
f2=open(sys.argv[2],"r")
f2_read=f2.readlines()
f2.close()

changed={}
first_c = ""
for n in range(len(f1_read)):
    if f1_read[n]!=f2_read[n]:
        if first_c == "":
            first_c=n+1
        changed[first_c]=n+1
    else:
        first_c=""

#Let's imitate diff-utils...

for (x, y) in changed.items():
    print "%d,%dc%d,%d" % (x,y,x,y)
    for i in range(x,y+1):
        sys.stdout.write("< %s" % f1_read[i-1])
    print "---"
    for i in range(x,y+1):
        sys.stdout.write("> %s" % f2_read[i-1])

Endgültige Ergebnisse: Bildbeschreibung hier eingeben

Antwort1

diff geht davon aus, dass die zweite Datei möglicherweise nicht nur durch das Bearbeiten von Zeilen, sondern auch durch das Einfügen und Löschen von Zeilen erstellt wurde.

Wenn Sie nur wissen möchten, welche Zeilen sich unterscheiden, ohne eingefügte oder gelöschte Zeilen zu berücksichtigen, können Sie einen einfacheren Ansatz verwenden.

$perl d.pl a b | less
  1:   255,   107 DIFFERENT!
  2:   197,   148 DIFFERENT!
  3:   113,   165 DIFFERENT!
  4:     0,   221 DIFFERENT!
  5:     0,   153 DIFFERENT!
  6:     0,    85 DIFFERENT!
  7:    48,   255 DIFFERENT!
  8:    61,   187 DIFFERENT!
  9:    63,    85 DIFFERENT!
 10:     3,     0 DIFFERENT!
 11:    49,     0 DIFFERENT!
 12:    58,    15 DIFFERENT!
 13:    47,     0 DIFFERENT!
 14:    62,     0 DIFFERENT!
 15:    61,     0 DIFFERENT!
 16:   255,   255 same
 17:   255,   255 same
 18:   255,   255 same
 19:   255,   255 same
 20:   255,   255 same
 21:   255,   255 same

wobei d.pl ist

#!/usr/bin/perl
use strict;
use warnings;

open my $f1, '<', $ARGV[0] or die "Can't read '$ARGV[0]' - $!\n";
open my $f2, '<', $ARGV[1] or die "Can't read '$ARGV[1]' - $!\n";

while (my $f1_line = <$f1>) {
  my $f2_line = <$f2>;
  chomp for $f1_line, $f2_line;
  my $verdict = $f1_line eq $f2_line ? 'same' : "DIFFERENT!";
  printf "%3d: %5d, %5d %s\n", $., $f1_line, $f2_line, $verdict;
}

close $f2;
close $f1;

Antwort2

Um Dateien nebeneinander zu vergleichen, ist mein LieblingstoolNotizblock++.

Klicken Sie nach der Installation in der Symbolleiste auf „Plugins“ > „Plugin-Manager“ > „Verfügbar“ und aktivieren Sie „Vergleichen und installieren“.

Öffnen Sie nach dem Neustart von Notepad++ die beiden Dateien (sie werden in unterschiedlichen Registerkarten geöffnet) und gehen Sie in der Symbolleiste zu Plugins > Vergleichen > Vergleichen.

Sie können zahlreiche Optimierungen vornehmen, aber der Dateivergleich sieht ungefähr so ​​aus:

Bildbeschreibung hier eingeben

wobei weißer Text unverändert bleibt, Rot entfernt und Grün hinzugefügt wird und die Seitenleiste eine Übersicht dieser Änderungen in den beiden Dateien anzeigt.

verwandte Informationen