Przejdź do treści
Quaestio

Porównaj teksty

Wklej oryginał i zmienioną wersję, a każda różnica zostanie wyróżniona, aż do pojedynczych słów.

Wklej tekst do obu pól, aby je porównać.

Osadź

Osadź to narzędzie na swojej stronie

Skopiuj kod i wklej go tam, gdzie ma się pojawić narzędzie, np. we wpisie na blogu albo na stronie szkoły. To nic nie kosztuje, ramka nie zawiera reklam, a narzędzie liczy w przeglądarce odwiedzającego.

Jak to działa

Porównanie wyszukuje najkrótszy ciąg dodanych i usuniętych wierszy, który zamienia jeden tekst w drugi, za pomocą algorytmu Eugene’a Myersa z 1986 roku. To ta sama metoda, której domyślnie używa git. Zmienione wiersze są następnie porównywane słowo po słowie, więc widać dokładnie, co się różni.

Dodane wiersze mają zielone tło, a usunięte czerwone. Zmieniony wiersz liczy się jako jeden usunięty i jeden dodany, tak jak w innych narzędziach diff.

Ignoruj wielkość liter sprawia, że Cześć i cześć są traktowane jako takie same. Ignoruj białe znaki pomija spacje na początku i końcu wiersza oraz kilka spacji z rzędu, co pomaga, gdy zmieniły się wcięcia.

Unified diff to format tekstowy, który tworzy polecenie diff -u, z trzema wierszami kontekstu wokół każdej zmiany. Można go wkleić do zgłoszenia błędu albo przekazać do patch i git apply.

Twoje teksty nigdy nie opuszczają przeglądarki. Bardzo długie teksty, które różnią się niemal w całości, nie są porównywane wiersz po wierszu; wtedy wszystkie wiersze są pokazane jako zmienione.

Jak narzędzie porównuje

Najpierw jednakowe wiersze na początku i na końcu są odkładane na bok, bo nie mogą należeć do żadnej zmiany. Między nimi algorytm Myersa znajduje najkrótszy ciąg usuniętych i dodanych wierszy. Końce wierszy CR LF i samo CR są wcześniej zamieniane na LF, więc ten sam tekst z Windowsa i z Maca jest traktowany jako jednakowy. W obrębie zmiany usunięte wiersze są pokazywane przed dodanymi i łączone w pary w kolejności do porównania słowo po słowie. Słowa są dzielone na spacjach i znakach interpunkcyjnych, więc zmieniony przecinek jest zaznaczany osobno.

Przykład

Porównaj wiersze „jabłko”, „banan”, „wiśnia” z wierszami „jabłko”, „banan w czekoladzie”, „wiśnia”, „daktyl”, w obu tekstach ze znakiem nowego wiersza po ostatnim wierszu. Algorytm zachowuje „jabłko” i „wiśnia”, usuwa „banan” i dodaje „banan w czekoladzie” oraz „daktyl”: dwa wiersze dodane i jeden usunięty. Wiersz „banan w czekoladzie” zostaje połączony w parę z wierszem „banan”, a jako nowe zaznaczone są tylko słowa w czekoladzie razem ze spacją przed nimi. W formacie unified diff to jeden fragment z nagłówkiem @@ -1,3 +1,4 @@: zaczyna się w wierszu 1 w obu tekstach i obejmuje trzy wiersze starego tekstu i cztery nowego.

Bez znaku nowego wiersza po ostatnim wierszu wynik się zmienia. Według GNU Diffutils ostatni wiersz bez tego znaku nie jest równy temu samemu wierszowi ze znakiem, a „wiśnia” była ostatnim wierszem tylko w starym tekście. Narzędzie pokazuje wtedy „wiśnia” jako wiersz usunięty i dodany, liczy trzy wiersze dodane i dwa usunięte, a po ostatnim wierszu każdego tekstu wypisuje \ No newline at end of file, tak jak diff -u. W widoku obok siebie i w jednej kolumnie usunięty wiersz „wiśnia” ma dopisek „brak znaku nowego wiersza na końcu”, bo inaczej wyglądałby na niezmieniony. Opcja „Ignoruj białe znaki” pomija tę różnicę.

Ograniczenia

Praca jest ograniczona do 4000 zmian na poziomie wierszy. Dwa teksty po 2001 zupełnie różnych wierszy przekraczają ten limit i wtedy wszystkie wiersze są pokazywane jako usunięte i dodane, bez porównania. Na poziomie słów limit wynosi 2000 zmian na parę wierszy, a jeśli zmieniło się ponad 80% znaków, wiersz jest pokazywany w całości, bez zaznaczania słów.

Czego nie widać

Przeniesione bloki nie są rozpoznawane, bo algorytm zna tylko usuwanie i dodawanie. Przenieś dwa pierwsze wiersze pięciowierszowego tekstu tuż przed ostatni, a narzędzie pokaże dwa wiersze usunięte i dwa dodane. „Ignoruj białe znaki” scala kilka spacji wewnątrz wiersza w jedną, ale ich nie usuwa: a,b i a, b nadal się różnią.

Źródła

Jak sprawdzamy narzędzia