Hoppa till innehållet
Quaestio

Jämför text

Klistra in originalet och den ändrade versionen, så markeras varje skillnad, ner till enskilda ord.

Klistra in text i båda fälten för att jämföra.

Bädda in

Bädda in verktyget på din sajt

Kopiera koden och klistra in den där verktyget ska synas, t.ex. i ett blogginlägg eller på en skolsida. Det är gratis, rutan har inga annonser och verktyget räknar i besökarens webbläsare.

Så fungerar det

Jämförelsen letar upp den kortaste följden av tillagda och borttagna rader som gör den ena texten till den andra, med Eugene Myers algoritm från 1986. Det är samma metod som git använder som standard. Rader som ändrats jämförs sedan ord för ord, så att du ser exakt vad som skiljer.

Tillagda rader visas med grön bakgrund och borttagna med röd. En ändrad rad räknas som en borttagen och en tillagd, precis som i vanliga diffverktyg.

Ignorera skiftläge gör att Hej och hej räknas som lika. Ignorera blanksteg bortser från blanksteg i början och slutet av raden och från flera blanksteg i rad, vilket är bra när indrag har ändrats.

Unified diff är det textformat som kommandot diff -u ger, med tre rader sammanhang runt varje ändring. Det kan klistras in i en felrapport eller läsas av patch och git apply.

Texterna lämnar aldrig din webbläsare. Mycket långa texter som skiljer sig nästan helt jämförs inte rad för rad; då visas alla rader som ändrade.

Så jämför verktyget

Först räknas lika rader i början och slutet bort, eftersom de inte kan ingå i någon ändring. Mellan dem söker Myers algoritm den kortaste följden av borttagna och tillagda rader. Radslut med CR LF eller bara CR görs om till LF innan, så samma text från Windows och från Mac räknas som lika. Inom en ändring visas borttagna rader före tillagda, och de paras ihop i ordning för jämförelsen ord för ord. Orden delas vid blanksteg och skiljetecken, så ett ändrat kommatecken markeras för sig.

Exempel

Jämför raderna äpple, banan, citron med äpple, banan split, citron, dadel, båda med en radbrytning efter sista raden. Algoritmen behåller äpple och citron, tar bort banan och lägger till banan split och dadel: två tillagda rader och en borttagen. Raden banan split paras ihop med banan, och bara ordet split med mellanslaget före markeras som nytt. I unified diff blir det ett enda stycke med rubriken @@ -1,3 +1,4 @@: det börjar på rad 1 i båda texterna och omfattar tre rader i den gamla och fyra i den nya.

Utan radbrytning efter sista raden blir resultatet ett annat. Enligt GNU Diffutils är en sista rad utan radbrytning inte lika med samma rad med radbrytning, och citron var sista rad bara i den gamla texten. Verktyget visar då citron som borttagen och tillagd, tre tillagda rader och två borttagna, och skriver \ No newline at end of file efter båda texternas sista rad, som diff -u gör. Sida vid sida och i en spalt får den borttagna raden citron markeringen ”ingen radbrytning i slutet”, eftersom den annars ser oförändrad ut. Ignorera blanksteg bortser från skillnaden.

Gränser

Arbetet begränsas till 4 000 ändringar på radnivå. Två texter med vardera 2 001 helt olika rader går över gränsen, och då visas alla rader som borttagna och tillagda utan jämförelse. På ordnivå är gränsen 2 000 ändringar per radpar, och är mer än 80 % av tecknen ändrade visas raden hel utan ordmarkering.

Det som inte syns

Flyttade stycken känns inte igen, eftersom algoritmen bara känner till borttagning och tillägg. Flyttas de två första raderna i en text med fem rader ned före den sista visar verktyget två borttagna och två tillagda rader. Ignorera blanksteg tar inte bort blanksteg inne i raden utan slår bara ihop dem: a,b och a, b räknas fortfarande som olika.

Källor

Så kontrolleras verktygen