Confronto tra 2 (o 3 file se possibile) “Linea per linea”


2

Voglio scoprire le differenze di 2 (o 3 file se possibile) riga per riga. Diff utils può farlo, tuttavia fornisce risultati imprecisi. Perché, 2 file hanno un numero esatto di righe che è "134". Ma diff mi dà "Linee aggiunte" e "Linee rimosse". Comunque sia sbagliato, hanno esattamente lo stesso numero di righe, non ci sono righe aggiunte o rimosse.

I file di testo di cui voglio trovare le differenze, hanno solo numeri scritti, forse è per questo che l'algortihm fallisce. Non sono riuscito a trovare alcuna opzione per impedirlo, anche se potrei sbagliarmi, intendo che dovrebbe esserci un'opzione per quello, ma di nuovo, non sono riuscito a trovare.

Questo è quello che ottengo (5 am.txt contro 6 am.txt, c'è un grosso problema): http://img26.imageshack.us/img26/7049/wrongp.png

Questo è quello che voglio (6 am.txt vs 7 am.txt, ha ancora problemi): http://img402.imageshack.us/img402/5421/semiright.png

Modificare:

Dopo aver capito che non c'è utilità per farlo, mi sono occupato. Ho quasi fatto la stessa cosa di RedGrittyBrick. Questo script imita l'utilità diff in modo che io (o te) possiamo usarlo con diff2html.

Per usarlo con diff2html, basta cambiare linea

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

per

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

e dai un nome a questo script come vuoi ( per eseguire Python 2.x , come 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])

Risultati finali: inserisci qui la descrizione dell'immagine


Windows o Linux, ma Windows è preferito
PythEch il

1
Ora, puoi darci un input di esempio e come vuoi che sia l'output del confronto? ( Modifica la domanda)
slhck,

cosa succede se usi diff -a(o, lo stesso diff --text)?
lupincho,

Non cambia nulla
PythEch,

1
Puoi provare " Beyond Compare ".
Daniel R Hicks,

Risposte:


3

diff presuppone che il secondo file possa essere stato creato non solo modificando le righe ma inserendo ed eliminando le righe.

Se vuoi solo sapere quali linee differiscono senza considerare le linee inserite o eliminate, puoi usare un approccio più semplice.

$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

dove d.pl è

#!/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;

Ho quasi finito il mio script Python che imita diff-utils :) Ma lo accetterò come risposta!
PythEch,

2

Per confrontare i file fianco a fianco, il mio strumento preferito è Notepad ++ .

Dopo averlo installato, nella barra degli strumenti fare clic su Plugin> Gestione plug-in> Disponibile e selezionare Confronta e installa.

Dopo aver riavviato Notepad ++, apri i due file (si apriranno in diverse schede) e nella barra degli strumenti vai a Plugin> Confronta> Confronta.

Ci sono più modifiche che puoi fare, ma il confronto dei file è simile al seguente:

inserisci qui la descrizione dell'immagine

dove il testo bianco rimane invariato, il rosso viene rimosso, il verde viene aggiunto e la barra laterale mostra una panoramica di tali modifiche nei due file.


Buon punto! Non ho mai saputo che Notepad ++ ha questa capacità! Ma dà gli stessi risultati. Sto pensando di creare il mio script che imita l'output diff e quindi userò di nuovo diff2html.
PythEch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.