Vai al contenuto
Quaestio

Confronta testi

Incolla l’originale e la versione modificata per vedere evidenziata ogni differenza, fino alle singole parole.

Incolla il testo in entrambi i campi per confrontarli.

Incorpora

Incorpora lo strumento nel tuo sito

Copia il codice e incollalo dove vuoi che appaia lo strumento, per esempio in un articolo del blog o in una pagina scolastica. È gratuito, il riquadro non ha pubblicità e lo strumento calcola nel browser del visitatore.

Come funziona

Il confronto cerca la sequenza più breve di righe aggiunte e rimosse che trasforma un testo nell’altro, con l’algoritmo di Eugene Myers del 1986. È lo stesso metodo che git usa di default. Le righe modificate vengono poi confrontate parola per parola, così vedi esattamente che cosa cambia.

Le righe aggiunte hanno lo sfondo verde e quelle rimosse lo sfondo rosso. Una riga modificata conta come una rimossa e una aggiunta, come negli altri strumenti di diff.

Ignora maiuscole/minuscole considera uguali Ciao e ciao. Ignora spazi non tiene conto degli spazi a inizio e fine riga né degli spazi ripetuti, il che aiuta quando è cambiata l’indentazione.

Lo unified diff è il formato di testo prodotto da diff -u, con tre righe di contesto attorno a ogni modifica. Si può incollare in una segnalazione di bug o far leggere a patch e git apply.

I tuoi testi non lasciano mai il browser. I testi molto lunghi che differiscono quasi del tutto non vengono confrontati riga per riga; in quel caso tutte le righe risultano modificate.

Come confronta lo strumento

Prima le righe uguali all’inizio e alla fine vengono messe da parte, perché non possono far parte di nessuna modifica. Fra di esse l’algoritmo di Myers trova la sequenza più breve di righe rimosse e aggiunte. Gli a capo in CR LF o in CR da solo vengono prima convertiti in LF, quindi lo stesso testo da Windows e da un Mac risulta uguale. Dentro una modifica le righe rimosse compaiono prima di quelle aggiunte, e sono abbinate in ordine per il confronto parola per parola. Le parole si separano agli spazi e alla punteggiatura, quindi una virgola cambiata viene segnata da sola.

Esempio

Confronta le righe mela, pera, ciliegia con mela, pera cotta, ciliegia, dattero, entrambe con un a capo dopo l’ultima riga. L’algoritmo tiene mela e ciliegia, rimuove pera e aggiunge pera cotta e dattero: due righe aggiunte e una rimossa. La riga pera cotta viene abbinata a pera, e solo la parola cotta, con lo spazio prima, è segnata come nuova. In unified diff è un unico blocco con l’intestazione @@ -1,3 +1,4 @@: comincia alla riga 1 in entrambi i testi e copre tre righe del vecchio e quattro del nuovo.

Senza a capo dopo l’ultima riga il risultato cambia. Per GNU Diffutils un’ultima riga senza a capo non corrisponde alla stessa riga con l’a capo, e ciliegia era l’ultima riga solo nel testo vecchio. Lo strumento mostra allora ciliegia come rimossa e aggiunta, tre righe aggiunte e due rimosse, e scrive \ No newline at end of file dopo l’ultima riga di ciascun testo, come fa diff -u. Fianco a fianco e in colonna singola la riga rimossa ciliegia porta l’indicazione «nessun a capo alla fine», perché altrimenti sembrerebbe invariata. Ignora spazi non tiene conto di questa differenza.

Limiti

Il lavoro si ferma a 4.000 modifiche a livello di riga. Due testi di 2.001 righe tutte diverse superano il limite, e allora tutte le righe compaiono come rimosse e aggiunte senza confronto. A livello di parola il limite è di 2.000 modifiche per coppia di righe, e se è cambiato più dell’80% dei caratteri la riga compare intera, senza segnare le parole.

Che cosa non si vede

I blocchi spostati non vengono riconosciuti, perché l’algoritmo conosce solo rimozioni e aggiunte. Sposta le prime due righe di un testo di cinque righe subito prima dell’ultima e lo strumento mostra due righe rimosse e due aggiunte. Ignora spazi riduce gli spazi dentro una riga ma non li toglie: a,b e a, b restano diversi.

Fonti

Come vengono verificati gli strumenti