Geschiedenisles: Wat is een .csv-bestand? Waarom Excel je gegevens verandert als het er een opent
Kommagescheiden waarden: de tabel in platte tekst die voortkwam uit het FORTRAN van de jaren zeventig en de eerste spreadsheets, pas in 2005 in RFC 4180 werd vastgelegd en nog steeds voorloopnullen en gennamen kwijtraakt zodra een spreadsheet raadt wat de tekst betekent.

TL;DR
Een .csv-bestand bevat kommagescheiden waarden (comma-separated values): een tabel als platte tekst, één record per regel, komma’s tussen de velden en dubbele aanhalingstekens rond elk veld dat een komma, een aanhalingsteken of een regeleinde bevat. Het idee is ouder dan de pc: in 1972 lazen IBM’s FORTRAN-compilers kommagescheiden invoer van terminals en ponskaarten, en in 1983 bewaarden spreadsheetprogramma’s al bestanden met de extensie .CSV. Niemand legde de regels formeel vast tot RFC 4180 in oktober 2005, die ook het MIME-type text/csv registreerde. Omdat een CSV geen kolomtypen, formules of codering meedraagt, moet elk programma dat hem opent raden, en de gokken van Excel zijn de reden dat voorloopnullen verdwijnen, gennamen datums worden en soms het hele bestand in één kolom terechtkomt.
Wat is een .csv-bestand?
Open een CSV in Kladblok en er is niets verborgen: regels tekst, elke regel een record, elke komma een kolomwissel. Een veld dat een komma moet bevatten, staat tussen dubbele aanhalingstekens, en een aanhalingsteken binnen zo’n veld wordt twee keer geschreven. Dat is het hele formaat. Er is geen kopblok, geen lijst met kolomtypen, geen formules en geen opmaak: alleen de waarden, zoals een programma ze heeft weggeschreven. Die eenvoud is de reden dat bijna elke database, spreadsheet, boekhoudpakket, bank en programmeertaal CSV kan lezen en schrijven, en dat het nog steeds het terugvalformaat is voor de meeste gegevensexports en -imports.
Waarom verknoeit Excel mijn CSV?
Omdat een CSV niet kan zeggen wat zijn waarden zijn, beslist Excel zelf. Microsofts eigen documentatie somt de automatische conversies op die Excel standaard toepast als tekst wordt getypt, geplakt of geladen: het verwijdert voorloopnullen en maakt van de rest een getal (00123 wordt 123; zo verliezen postcodes en personeelsnummers hun eerste cijfer); het bewaart van lange getallen alleen de eerste 15 cijfers en toont ze mogelijk in wetenschappelijke notatie (de laatste cijfers van een kaart- of rekeningnummer worden nullen); het leest cijfers rond de letter E als exponent (123E5 wordt 1,23E+07); en het zet datumachtige tekst zoals JAN1 om in een datum. Sla je het blad daarna weer op als CSV, dan worden de geconverteerde waarden weggeschreven.
De tweede verrassing is het scheidingsteken. Bij het opslaan of openen van een CSV gebruikt Excel het lijstscheidingsteken uit de landinstellingen van Windows. In een groot deel van continentaal Europa, ook in Nederland en België, is de komma het decimaalteken (3,14), dus is het lijstscheidingsteken een puntkomma, en Microsofts instructies bevestigen het verband: het decimaalteken op een komma zetten „dwingt Excel om een puntkomma als lijstscheidingsteken te gebruiken”. Een bestand dat in Amsterdam is opgeslagen, staat daarom vaak vol puntkomma’s, en een kommagescheiden bestand uit een Amerikaans systeem kan openen met elke rij in kolom A geperst. De tekencodering is de derde valkuil: Microsoft merkt op dat een UTF-8-CSV alleen normaal opent als die is opgeslagen met een byte order mark (BOM), een paar onzichtbare bytes aan het begin die de codering aankondigen; zonder BOM kunnen letters met accenten in wartaal veranderen, tenzij je het bestand importeert en UTF-8 kiest.
Een CSV openen zonder gokwerk
Kies in Excel in plaats van dubbelklikken Gegevens > Gegevens ophalen > Van tekst/CSV, controleer het scheidingsteken en de bestandsoorsprong (codering) en zet kolommen als postcodes, rekeningnummers of gensymbolen op Tekst voordat je laadt. Recente Excel-versies laten je ook afzonderlijke conversies uitzetten via Bestand > Opties > Gegevens > Automatische gegevensconversie.
1972: komma’s in plaats van kaartkolommen
Voordat CSV een naam had, had het een reden. Gegevens voor mainframeprogramma’s uit de jaren zestig werden meestal in vaste kolommen van ponskaarten met 80 kolommen geponst, en een FORTRAN-programma had een FORMAT-opdracht nodig die precies zei welke kolommen welk getal bevatten; een waarde die één kolom verschoven was geponst, werd verkeerd gelezen. IBM’s FORTRAN IV-programmaproducten voor de besturingssystemen OS en VM/370, beschreven in een algemene informatiehandleiding van juli 1972, boden een alternatief: lijstgestuurde invoer en uitvoer. De handleiding legt uit dat invoerwaarden „worden gescheiden door spaties of komma’s, waarbij opeenvolgende komma’s weggelaten waarden aangeven”, en dat de zorg van de programmeur „over de indeling van gegevens en specifieke kaartkolommen” verdwijnt. IBM rekende het toen tot zijn uitbreidingen van de standaardtaal.
Lijstgestuurde invoer werd onderdeel van de standaardtaal met FORTRAN 77, goedgekeurd in 1978. Het accepteerde komma’s of spaties als scheidingstekens, dus een tekst zonder aanhalingstekens kon geen van beide bevatten: precies het probleem dat de aanhalingstekens van CSV later moesten oplossen. Niets hiervan was al een bestandsformaat. Het was een manier om mensen getallen achter elkaar te laten typen, gescheiden door komma’s, en de computer te laten uitzoeken waar elk getal begon.
1983: een spreadsheet geeft de bestanden een extensie
De spreadsheets van microcomputers maakten van de gewoonte bestanden. De naslaggids uit 1983 van de Osborne Executive, een draagbare kantoorcomputer die met Sorcims SuperCalc werd geleverd, beschrijft een conversieprogramma dat „.CSV voor Comma-Separated-Value-bestanden” toekent en legt de opbouw uit: rijen gegevens, elk afgesloten met een regelterugloop en een regelopschuiving, kommagescheiden waarden, tekenreeksen tussen dubbele aanhalingstekens, die komma’s mogen bevatten, en een Control-Z als einde van het bestand. De gids voegt eraan toe dat zulke gegevens ook op een mainframe konden worden aangemaakt en naar het bureau gedownload.
Dezelfde gids benoemt het compromis dat het formaat nog altijd bepaalt. Formules worden niet naar een CSV-bestand gestuurd; „alleen de waarden die op het moment van de conversie op het scherm staan” worden verstuurd. Zet een blad om naar CSV en terug, en de formules zijn weg. CSV was nooit bedoeld als vervanging van een spreadsheet. Het was de kleinste gemene deler waarmee een spreadsheet, een database, een BASIC-programma en een mainframe het eens konden worden over rijen en kolommen.
Hoe de bytes werken
Een CSV bestaat alleen uit tekens. Elk record is een regel, klassiek afgesloten met regelterugloop en regelopschuiving (CRLF, de twee besturingstekens waarmee DOS en Windows een regel beëindigen), al schrijven sommige programma’s alleen een regelopschuiving. Velden worden gescheiden door komma’s. Een veld mag tussen dubbele aanhalingstekens staan en moet dat als het een komma, een aanhalingsteken of een regeleinde bevat; een aanhalingsteken binnen zo’n veld wordt verdubbeld (""). De eerste regel kan een kopregel met kolomnamen zijn, maar niets in het bestand zegt of dat zo is. En niets zegt wat de waarden betekenen: 00123, 1-2 en MARCH1 zijn gewoon tekst totdat een programma iets anders besluit.
Het bestand zegt ook niet welke tekencodering het gebruikt, de koppeling tussen bytes en letters. Oudere CSV’s werden vaak geschreven in een codetabel van één byte uit Windows of DOS die bij de taal van de computer paste; nieuwere zijn meestal UTF-8, de Unicode-codering waarop het web draait. Het programma dat het bestand leest, moet raden: daarom doet de BOM ertoe voor Excel, en daarom gaan namen met accenten, trema’s of Aziatische schriften als eerste stuk wanneer een CSV tussen systemen verhuist.
2005: RFC 4180 legt de regels vast
Begin jaren 2000 was CSV overal en nergens gespecificeerd. In oktober 2005 publiceerde de IETF (Internet Engineering Task Force, het orgaan dat internetstandaarden opstelt) RFC 4180, „Common Format and MIME Type for Comma-Separated Values (CSV) Files”, geschreven door Yakov Shafranovich. De inleiding is duidelijk: „Verrassend genoeg is dit formaat, hoewel het zeer gangbaar is, nooit formeel gedocumenteerd.” Het memo beschrijft „het formaat dat de meeste implementaties lijken te volgen” (CRLF-regeleinden, een optionele kopregel, komma’s, regels voor dubbele aanhalingstekens) en registreert text/csv bij IANA, de instantie die de lijst met mediatypen bijhoudt, met de optionele parameters charset en header. Het merkt zelfs op dat „sommige programma’s, zoals Microsoft Excel, helemaal geen dubbele aanhalingstekens gebruiken”.
RFC 4180 is een informatieve RFC; hij zegt zelf „geen enkele internetstandaard van welke aard dan ook” vast te leggen. Later werk bouwde eromheen in plaats van hem te vervangen: in 2014 definieerde RFC 7111 hoe een webadres naar bepaalde rijen, kolommen of cellen van een text/csv-bestand kan verwijzen, en een W3C-werkgroep genaamd CSV on the Web, die in 2016 werd gesloten, publiceerde aanbevelingen om de kolommen van een CSV, inclusief hun typen, in een apart metadatabestand te beschrijven. De CSV zelf heeft ze nog steeds niet.
Als de gok misgaat: genen, datums en verloren rijen
Het best gedocumenteerde slachtoffer is de biologie. In 2004 meldden Barry Zeeberg en collega’s in BMC Bioinformatics dat de standaardconversies van Excel gennamen veranderden: de tumorsuppressor DEC1 werd „1-DEC”, en RIKEN-kloonnummers zoals 2310009E13 werden het getal 2,31E+13, conversies die zij onomkeerbaar noemden. In 2016 onderzochten Mark Ziemann, Yotam Eren en Assam El-Osta aanvullende Excel-bestanden van 18 tijdschriften uit 2005 tot en met 2015 en vonden fouten in gennamen in de bestanden van 704 artikelen, 19,6% van de artikelen met genlijsten in Excel. In 2020 publiceerde het HUGO Gene Nomenclature Committee (HGNC), dat menselijke gensymbolen goedkeurt, richtlijnen die bevestigden dat alle symbolen die automatisch datums werden, in de loop van 2019 waren gewijzigd: SEPT1 heet nu SEPTIN1 en MARCH1 heet nu MARCHF1.
CSV stond ook aan het begin van een storing in de volksgezondheid. Tussen 25 september en 2 oktober 2020 ontbraken 15.841 positieve COVID-19-gevallen in Engeland in de dagcijfers. Public Health England (PHE) verklaarde dat sommige bestanden de maximale bestandsgrootte hadden overschreden van het proces dat de uitslagen in centrale systemen laadde. De BBC meldde dat de testbedrijven hun uitslagen zonder problemen als CSV-bestanden hadden aangeleverd, maar dat het geautomatiseerde proces van PHE ze in Excel-sjablonen in het oude XLS-formaat goot, dat maar zo’n 65.000 rijen bevat; met meerdere rijen per test was elk sjabloon bij ongeveer 1.400 gevallen vol en viel de rest weg.
Microsoft veranderde uiteindelijk de software in plaats van de standaardinstellingen. In oktober 2023 kondigde het Excel-team de algemene beschikbaarheid aan van instellingen voor automatische gegevensconversie voor Windows (versie 2309 of later) en Mac (16.77 of later), met selectievakjes voor voorloopnullen, afkapping op 15 cijfers, de letter E en „doorlopende letters en cijfers” naar datums, plus een optionele waarschuwing wanneer een .csv- of .txt-bestand op het punt staat te worden geconverteerd. De conversies blijven aan totdat je ze uitzet.
Bewaar de originele CSV
Zodra Excel een kolom heeft geconverteerd en je het bestand overschrijft, bevat de CSV de gewijzigde waarden; de oorspronkelijke tekst is daaruit niet terug te halen. Werk met een kopie en bewaar de onaangeroerde export naast wat je bewerkt.
Waarom er in 2026 nog .csv-bestanden op schijven staan
CSV heeft de systemen overleefd die de bestanden maakten, omdat het de nooduitgang was. Banken bieden afschriften aan als CSV, oude boekhoud- en ledenadministratieprogramma’s exporteren hun records zo, laboratoriuminstrumenten en dataloggers schrijven het, en decennia aan databasemigraties zijn erdoorheen gegaan. Veel van die bestanden zijn nu verouderde bestanden: exports uit software die niet meer draait, geschreven in een oude codetabel, met puntkomma’s of komma’s afhankelijk van hoe de pc was ingesteld, en vol postcodes, artikelnummers en id’s die een moderne spreadsheet bij de eerste dubbelklik stilletjes anders zal interpreteren.
Legacy File Converter vermeldt kommagescheiden waarden (.csv) bij de spreadsheets op de pagina Ondersteunde bestandstypen en zet ze op je eigen Windows-pc om naar XLSX, PDF, Markdown of HTML; er wordt niets geüpload, wat ertoe doet als de export bank- of ledengegevens bevat. Controleer daarna kolommen als postcodes, lange id’s en datums tegen het originele bestand. Voor andere vroege manieren om spreadsheetgegevens uit te wisselen, zie Geschiedenisles: Wat is een .dif-bestand? en Geschiedenisles: Wat is een .slk-bestand?; voor de binaire werkmap uit het COVID-19-verhaal, zie Geschiedenisles: Wat is een .xls-bestand?.
Gerelateerde artikelen
Klaar om je oude bestanden te openen?
Begin gratis en ontgrendel daarna onbeperkt converteren met een eenmalige Standard-licentie van $79.95. Download het Windows-installatieprogramma – alle functies voor tot 10 bestanden.
Gratis proefversie
Alle functies van de app · tot 10 bestanden
Windows 10 of 11
Gratis proefversie – converteer tot 10 bestanden. Download het Windows-installatieprogramma en converteer lokaal op je pc.
Direct Windows-installatieprogramma · offline MSI
Is dit veilig? — uitgever, installatieprogramma en hulp bij SmartScreen
Vereist Windows 10 of 11. Geen abonnementen.