Command Palette

Search for a command to run...

CSV-verschil: vergelijk twee CSV-bestanden zonder dat er een lijnverschil voor u ligt

CSV-verschil: vergelijk twee CSV-bestanden zonder dat er een lijnverschil voor u ligt

T
Toolz Team
|Aug 23, 2026|17 min lezen

Onderdeel van de collectie Diff & Vergelijk

Het bugrapport dat me dit deed bouwen was drie woorden lang: " de synchronisatie laat rijen vallen." Een client' De productfeed kwam binnen als een nachtelijke CSV, mijn Laravel-importeur herschreef het, en ergens tussen de twee bestanden verdween een handvol SKU's. Mijn eerste instinct lag voor de hand: gooi beide bestanden in een lijndiff. Het diff kwam effen rood terug. Elke regel was & quot; gewijzigd, & quot; omdat de export die avond door een andere kolom was gesorteerd, dus regel 4 in het oude bestand was regel 900 in de nieuwe. Het regeldiff was technisch correct en volledig nutteloos. CSV diff checker, en deze gids is de redenering erachter.

tl;dr: Een CSV diff vergelijkt twee CSV-bestanden als gestructureerde gegevens in plaats van als tekstregels Match rijen door een sleutelkolom zoals id of email en elke record wordt vergeleken met zijn tegenhanger waar deze ook in het bestand is verplaatst, dus een opnieuw gesorteerde export rapporteert geen duizenden valse wijzigingen De Toolz-tool parseert beide bestanden met een RFC 4180-statusmachine, splitst het resultaat in toegevoegde, verwijderde en gewijzigde rijen en toont de exacte cel die voor elke gewijzigde rij verschilt. Het draait volledig clientzijde: geen upload, geen aanmelding, werkt offline.

Ik bouw SaaS-producten op Laravel en React en ik verzend WordPress-plug-ins, wat betekent dat ik veel tijd besteed aan het afstemmen van export: één systeem' is de weergave van de gegevens met een ander en#39;s, gisteravond' is snapshot tegen vanavond's, het bestand dat een klant zweert te hebben verzonden tegen het bestand dat daadwerkelijk is aangekomen CSV is de lingua franca voor dit alles, en het correct vergelijken van twee CSV's is een van die taken die er triviaal uitzien totdat je het probeert te doen met de verkeerde tool Dit is de gids waarvan ik wou dat de gefrustreerde versie van mij had gelezen.

Wat is een CSV diff checker?

Een CSV diff checker neemt twee CSV-bestanden, een originele en een gewijzigde versie, en rapporteert hoe de tweede verschilt van de eerste op het niveau van rijen en cellen, In plaats van de toegevoegde en verwijderde regels uitvoer van een tekst diff, krijg je vier buckets: rijen die alleen bestaan in het nieuwe bestand (toegevoegd), rijen die alleen bestaan in het oude bestand (verwijderd), rijen die in beide bestaan maar waarvan de waarden verschillen (gewijzigd), en rijen die identiek zijn (ongewijzigd) Voor elke gewijzigde rij gaat een goed hulpmiddel een niveau dieper en noemt de specifieke kolommen die zijn verplaatst, waarbij de oude waarde naast de nieuwe wordt weergegeven.

Het onderscheid dat het geheel doet werken, is hoe rijen over de twee bestanden worden gekoppeld. Een CSV-diff kan overeenkomen met een sleutelkolom, waarbij een waarde wordt behandeld als een id of een email als de identiteit van het record, of het kan overeenkomen per positie, vergelijking rij één naar rij één Key matching is wat je wilt bijna elke keer dat u export vergelijkt, omdat hetzelfde record kan landen op een andere lijn elke keer dat de gegevens worden getrokken Positiematching is voor bestanden waar het regelnummer zelf is betekenisvol en stabiel, als een genummerd grootboek dat alleen maar wordt toegevoegd aan de juiste modus is de enige belangrijkste beslissing, en het is de reden waarom de Toolz tool zet het voor en midden in plaats van te raden.

Waarom wordt een lijndiff volledig rood bij een opnieuw gesorteerde export?

Dit is de mislukking die mensen stuurt die op zoek zijn naar een CSV-specifiek hulpmiddel, dus het is de moeite waard om precies te begrijpen Een tekstdiff, het soort dat in Git en elke code-editor is ingebouwd, vergelijkt bestanden regel voor regel en in volgorde Het voert een algoritme uit dat de langste gemeenschappelijke reeks regels vindt en al het andere markeert als ingevoegd of verwijderd. Dat is precies goed voor de broncode, waarbij de volgorde van de regels de betekenis van het bestand is. Verplaats een functie en u hebt het bestand echt gewijzigd.

Een CSV export is het tegenovergestelde De volgorde van rijen is meestal een toeval van wat dan ook ORDER BY de query is toevallig gebruikt, en het kan veranderen tussen twee runs die identieke gegevens bevatten Op het moment dat de sorteervolgorde verschuift, ziet een lijndiff bijna elke regel in een nieuwe positie, slaagt er niet in om ze op een rij te zetten, en rapporteert het hele bestand als gewijzigd De informatie die je wilde, welke drie records daadwerkelijk veranderd hebben, ligt begraven onder duizenden valse positieven Het diff deed zijn werk trouw; het beantwoordde net een vraag over regels toen je een vraag had over records.

Een CSV-diff lost dit op door het bestand eerst in rijen en kolommen te parseren en vervolgens records te vergelijken op basis van hun sleutel in plaats van op basis van hun regelnummer. Het opnieuw sorteren van het bestand heeft geen effect, omdat de SKU A-1007 wordt vergeleken met de rij met SKU A-1007 in het andere bestand maakt niet uit waar een van beide zit Dat is de hele reden dat de categorie bestaat, en het is waarom ik reik naar de CSV diff-tool in plaats van git diff wanneer het bestand gegevens zijn in plaats van code.

Wat heeft RFC 4180 te maken met het vergelijken van bestanden?

Alles, want je kunt twee CSV's niet goed vergelijken als je ze niet eerst goed kunt ontleden CSV werd al tientallen jaren gebruikt voordat iemand het standaardiseerde In 2005 publiceerde de IETF RFC 4180, waarin het gemeenschappelijke formaat en de text/csv MIME-type Het is niet een wet die elk hulpmiddel gehoorzaamt, maar het komt het dichtst in de buurt van een gedeeld contract en definieert de regels dat een naïeve vergelijking verkeerd wordt.

De regel die het belangrijkst is is citeren Een veld mag in dubbele aanhalingstekens worden gewikkeld, en dat moet ook zo zijn als het een komma, een dubbele aanhalingstekens of een regeleinde bevat Een dubbele aanhalingstekens binnen een geciteerd veld wordt ontsnapt door deze te verdubbelen. Dus de waarde "Doe, John" is een enkel veld, en "She said ""hi""" is de waarde She said "hi". Een vergelijking waarbij elke regel op komma's wordt gesplitst, wordt verwijderd "Doe, John" in twee velden, verschuif elke kolom erachter, en dan vol vertrouwen melden dat de rij veranderd toen het niet.de Toolz diff draait dezelfde RFC 4180 toestand machine die de CSV-viewer: het loopt de tekst teken voor teken, houdt bij of het binnen een geciteerd veld is, en behandelt alleen een komma of een nieuwe regel als een scheidingsteken wanneer het buiten de aanhalingstekens is Het recht hebben van de parse is een voorwaarde voor het juiste diff, en het is het deel dat handgerolde scripts bijna altijd overslaan.

Hoe vergelijk ik twee CSV-bestanden met de tool?

De stroom is expres kort Plakken van het originele bestand in het eerste vak en het gewijzigde bestand in het tweede, of klik op Voorbeeld laden om een bewerkt voorbeeld te zien waarbij één rij wordt bewerkt, één wordt toegevoegd en één wordt verwijderd.

Bevestig de scheidingsteken Automatisch scores komma, puntkomma, tabblad, en pipe door hoe consistent elk van hen de eerste verschillende regels in hetzelfde aantal kolommen splitst, die correct omgaan met Europese puntkommabestanden en tab-gescheiden export Als de detectie verkeerd is voor uw gegevens, stel deze dan met de hand in Laat de kopschakelaar aan als de eerste rij van elk bestand kolomnamen bevat, dat is wat de keycolumn selector voedt.

Kies nu hoe rijen worden gematcht Kies een sleutelkolom uit de dropdown, meestal een id, email, of SKU, en het gereedschap vergelijkt records met die waarde Selecteer in plaats daarvan Positie om rij voor rij te vergelijken Twee schakelaars verfijnen de vergelijking: schakel hoofdletterongevoelige matching in als Active en active moet tellen als dezelfde waarde, en laat trim-witruimte op zodat een verdwaalde leidende ruimte niet registreert als een verandering Klik op Vergelijken, en de samenvatting toont vier tellingen in één oogopslag Open het tabblad Gewijzigd om elke bewerkte rij uit te breiden en zie precies welke cellen zijn verplaatst, of de tabbladen Toegevoegd en verwijderd om de volledige rijen als een tabel te zien Wanneer u klaar bent, kopieert u rapport of downloadt u een samenvatting in platte tekst van elk verschil, inclusief de voor - en nawaarde van elke gewijzigde cel, klaar om te plakken in een pull-verzoek, een ticket of een e-mail naar de klant.

Wanneer moet ik matchen op sleutel versus op positie?

Dit is de keuze die bepaalt of het diff nuttig is of ruis, dus hier is de regel die ik gebruik, opgesteld als tabel.

betrekking Match by waarom
Database- of API-export die opnieuw kan worden gesorteerd Sleutelkolom Hetzelfde record landt op verschillende lijnen die elke trekkracht volgt; de sleutel is de stabiele identiteit
Het combineren van twee systemen' weergave van dezelfde records Sleutelkolom Het maakt je uit of een record aan beide kanten bestaat en overeenkomt, niet waar het staat
Gisteravond vergelijken's momentopname met vanavond's Sleutelkolom Rijen worden in de loop van de tijd toegevoegd en verwijderd, zodat lijnnummers afdrijven
Alleen-toevoegen log of grootboek met een vaste volgorde Position Regelnummer is stabiel en betekenisvol; rij N is echt " het N-de evenement"
Twee bestanden die u kent, delen exact dezelfde rijvolgorde Position Er bestaat geen sleutel, maar de bestelling is gegarandeerd identiek
Een bestand zonder unieke kolom Position Er is niets om op in te spelen, dus vergelijk in volgorde en accepteer de beperking

De korte versie: bereik standaard naar sleutelmatching, omdat de meeste CSV's export zijn van records die een identificatie bevatten Val alleen terug naar positionele matching als er geen bruikbare sleutel is of als de rijvolgorde echt deel uitmaakt van de gegevens Als u een sleutel kiest en de tool waarschuwt dat de kolom dubbele waarden bevat, dat is een signaal dat de kolom niet echt uniek is, en u moet een betere sleutel kiezen of de bron opschonen. Ik heb meer dan één gebroken export gevangen, juist omdat de & quot;unique" ID-kolom bleek dat niet te zijn.

Hoe laat het zien wat er eigenlijk op een rij is veranderd?

Een telling van "5 rijen changed" is een begin, maar de vraag die je echt hebt is " changed how?" Het Toolz diff antwoordt dat per rij Wanneer een gematchte record verschilt, vergelijkt het de twee versies kolom voor kolom en vermeldt alleen de cellen die bewogen zijn, elk weergegeven als de vorige waarde doorgestreept naast de nieuwe waarde Een klantenrij waar alleen de plan column ging van free tegen pro meldt dat eencellige, niet de hele record, dus je kijkt niet naar twee lange rijen om het ene veld te zien dat is veranderd.

Deze weergave op celniveau is waar een CSV-diff zijn keep verdient over een spreadsheet' zijn eigen vergelijkingsfuncties, die de neiging hebben om cellen met kleur te markeren maar u niets geven om te kopiëren of in een recensie te plakken Het geëxporteerde rapport spelt elke verandering in tekst: de sleutel van de rij, de kolomnaam en de oude en nieuwe waarde In de praktijk plak ik dat recht in de beschrijving van een pull-verzoek zodat een reviewer de data-impact van een migratie kan zien zonder de bestanden zelf te openen Het is hetzelfde instinct achter de structuur JSON diff, die gewijzigde sleutels met hun paden rapporteert in plaats van luidruchtige lijnwijzigingen; beide tools bestaan omdat "wat veranderde" is een betere vraag dan "welke regels verschillen."

Is het veilig om gevoelige CSV-bestanden online te vergelijken?

Voor deze tool, ja, en de reden is eerder architectonisch dan een pinky belofte Elke stap, het parseren van beide bestanden, het matchen van rijen, het berekenen van de per-cel verschillen, en het bouwen van het rapport, draait als JavaScript binnen uw eigen browser tabblad Er is geen upload, geen server round trip, en niets is gelogd of opgeslagen U kunt het bewijzen door het openen van uw browser' s netwerk tabblad en klikken op Vergelijken: geen verzoek verlaat de pagina Zodra de pagina is geladen kunt u de verbinding met het internet volledig verbreken en het blijft werken.

Dat is belangrijk omdat de CSV's die mensen verspreiden tot de meest gevoelige bestanden behoren die een bedrijf bezit Klantenlijsten, transactie-exports, loonlijsten, voorraadtabellen en toegangslogboeken reizen allemaal als CSV. Een vergelijkingstool die uw bestanden naar een server uploadt, hoe goed bedoeld ook, verandert twee privéspreadsheets in iemand anders's logboekvermeldingen. De verwerking aan de clientzijde verwijdert de vraag: de gegevens verlaten nooit de machine waarop ze zijn gestart. Die standaard is opzettelijk voor elke tool op Toolz.dev, en ik heb het langere argument in de Toolz.dev opgeschreven gegevensprivacygids voor online tools voor iedereen die de volledige redenering wil.

Hoe past een CSV diff in een echte workflow?

Het diff is zelden de hele klus; het is één station in een pijplijn Het patroon dat ik het vaakst aanraak is verificatie: ik voer een import of een migratie uit, verspreid vervolgens de voor- en na-export om te bevestigen dat het script precies deed wat ik had verwacht en niets meer. Een schoon diff van " drie veranderd, nul verwijderd" is een veel beter teken dat een migratie heeft gewerkt dan een groen vinkje uit het script waarop deze werd uitgevoerd. Wanneer het diff een verwijdering laat zien die ik niet van plan was, heb ik de bug opgemerkt voordat deze in productie kwam in plaats van erna.

De tools eromheen zijn afhankelijk van waar het bestand voor is Als ik een bestand als sorteerbaar raster moet bekijken voordat ik het vergelijk, dan is de CSV-viewer geeft dezelfde RFC 4180 parseren als een tabel Als de vergelijking die ik wil echt gaat over lidmaatschap, welke waarden verschijnen in het ene bestand maar niet in het andere in plaats van welke rijen zijn gewijzigd, dan is de vergelijk twee lijsten tool stelt rekenkunde in op enkele kolommen en past beter. En wanneer de gegevens iets moeten worden dat een API kan verbruiken, zal de CSV naar JSON converter is de volgende hop Geen van deze upload je data, dus je kan ze zonder een tweede gedachte aan hetzelfde privébestand ketenen Als je een kit aan het samenstellen bent voor dit soort datawerk, mijn Handleiding voor webontwikkelaars loopt door hoe de stukken met elkaar verbonden zijn.

Veelgestelde vragen

Hoe vergelijk ik twee CSV-bestanden? Open de CSV diff checker, plak de originele CSV in het eerste vak en de gewijzigde CSV in het tweede, bevestig de instellingen van de scheidingsteken en de header, kies een sleutelkolom of positionele matching en klik op Vergelijken Het resultaat wordt gesplitst in toegevoegde, verwijderde en gewijzigde rijen, en elke gewijzigde rij toont de exacte cellen die verschillen Alles draait in uw browser, zodat de bestanden nooit worden geüpload.

Wat is het verschil tussen key matching en position matching? Sleutelmatching paren rijen die dezelfde waarde delen in een gekozen kolom, zoals id, dus een record wordt vergeleken met zijn tegenhanger waar het ook in een van beide bestanden voorkomt Positiematching vergelijkt rij één met rij één in bestandsvolgorde Gebruik sleutelmatching voor exports die opnieuw kunnen worden gesorteerd, en positiematching voor bestanden met een vaste volgorde, zoals een logboek met alleen bijlagen.

Waarom laat een tekstdiff elke regel zien als gewijzigd als de gegevens nauwelijks bewogen zijn? Omdat een tekst diff bestanden regel voor regel en in volgorde vergelijkt Als de export opnieuw gesorteerd wordt, landt bijna elke regel op een nieuwe positie en het diff markeert het hele bestand als gewijzigd, ook al zijn de onderliggende records hetzelfde Een CSV verspreidt het bestand in rijen en kolommen en vergelijkt records per toets, dus het opnieuw sorteren heeft geen effect en er worden alleen echte wijzigingen gerapporteerd.

Laat het zien welke specifieke cel in een rij is veranderd? Ja. wanneer een overeenkomende rij verschilt, vermeldt de tool elke gewijzigde kolom op naam en toont de vorige waarde naast de nieuwe waarde. Een rij waarin alleen de statuskolom van actief naar gesloten is verplaatst, rapporteert die enkele cel in plaats van de hele rij te markeren.

Welke afbakeningen ondersteunt het? Komma, puntkomma, tabblad en pijp De scheidingsteken wordt automatisch gedetecteerd uit het eerste bestand door het scheidingsteken te kiezen dat een consistent kolomaantal over de eerste verschillende regels produceert, en u kunt het handmatig overschrijven als de detectie verkeerd is voor uw gegevens.

Wat gebeurt er als mijn sleutelkolom dubbele waarden heeft? Het gereedschap waarschuwt u dat de sleutelkolom duplicaten bevat en vergelijkt alleen de eerste rij voor elke sleutel Dubbele sleutels betekenen meestal dat de kolom geen echte unieke identificatie is, dus de waarschuwing is een prompt om een andere sleutel te kiezen of de gegevens op te schonen voordat u het diff vertrouwt.

Worden mijn CSV-bestanden ergens geüpload? Nee Alle parseren en vergelijken worden lokaal uitgevoerd in uw browser met gewoon JavaScript Niets wordt verzonden, gelogd of opgeslagen, en u kunt het bevestigen op het tabblad netwerk waar geen verzoek verschijnt De tool blijft ook offline werken zodra de pagina is geladen.

Hoe groot kan een bestand aan? Key matching maakt gebruik van hash maps in plaats van geneste lussen, dus het schaalt ruwweg lineair en verwerkt tienduizenden rijen comfortabel De praktische limiet is dat uw browser een zeer grote resultatenset weergeeft, niet de vergelijking zelf.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!