Open een CSV-bestand om de structuur te controleren: elk record tegen het aantal velden in de kopregel, lege en dubbele kolomnamen, losse aanhalingstekens, gemengde regeleinden en lege regels. Voeg desgewenst per kolom regels toe, zoals geheel getal, datum, e-mailadres, verplicht, uniek, toegestane waarden of een reguliere expressie. Elk probleem wordt vermeld met de gegevensrij, de kolom en de waarde. De regels gebruiken de woordenschat van Frictionless Table Schema. Het bestand wordt in je browser gecontroleerd en niet geüpload.
Zo valideer je een CSV-bestand
- Open een
.csv-,.tsv- of.txt-bestand. Het scheidingsteken en een UTF-8- of UTF-16-byte order mark worden herkend. Zien de kolommen er niet goed uit, kies dan in de importinstellingen een ander scheidingsteken of een oudere codering. - Vul desgewenst in hoeveel kolommen elk record moet hebben. Laat je het leeg, dan geldt het aantal kolommen van de kopregel.
- Voeg desgewenst regels toe voor de kolommen die ertoe doen: een type, of een waarde verplicht of uniek moet zijn, toegestane waarden, een minimum en maximum, een bereik voor de lengte of een patroon.
- Start de controle en loop het rapport door: eerst de fouten, dan de waarschuwingen. Herstel waarden in de CSV-editor of maak ze netjes met CSV-gegevens opschonen, en valideer daarna opnieuw.
Wil je per kolom de typen, lege cellen en verschillende waarden zien voordat je regels schrijft? Breng het bestand dan eerst in kaart met het kolomprofiel.
Structuurcontroles op elk record
| Aantal velden (fout) | Een record heeft meer of minder velden dan de kopregel, of dan het aantal dat je hebt ingevuld. RFC 4180 verwacht dat elk record evenveel velden heeft. Een verschil betekent meestal een scheidingsteken zonder aanhalingstekens eromheen of een ontbrekende waarde. |
|---|---|
| Lege kolomnaam (fout) | Een kolomnaam is leeg of bevat alleen spaties. Het rapport geeft de positie. |
| Dubbele kolomnaam (fout) | Twee kolomnamen zijn gelijk nadat de spaties eromheen zijn weggehaald. Het rapport geeft beide posities. |
| Los aanhalingsteken (waarschuwing) | Er staat een aanhalingsteken binnen een waarde zonder aanhalingstekens, zoals 5" screen. De waarde blijft zoals hij staat; het rapport geeft het aantal voor het hele bestand. |
| Tekst na een sluitend aanhalingsteken (waarschuwing) | Na een sluitend aanhalingsteken volgen nog tekens vóór het volgende scheidingsteken, zoals in "abc"x. |
| Gemengde regeleinden (waarschuwing) | Het bestand gebruikt door elkaar CRLF, LF en CR aan het einde van records. Het rapport telt elke soort. |
| Lege regels (waarschuwing) | Lege regels tussen records. Ze worden overgeslagen en het rapport telt ze. |
| Spaties eromheen (waarschuwing) | Een waarde heeft spaties vóór of na de tekst. Standaard aan; waarden die alleen uit spaties bestaan, worden niet gemeld. |
Wordt een waarde tussen aanhalingstekens nooit afgesloten, dan stopt de controle met een fout die het record noemt waar de waarde begint. De rest van het bestand is dan namelijk niet betrouwbaar in records op te delen.
Kolomregels: type, verplicht, uniek en patroon
| Type: geheel getal | Alleen een optioneel teken en cijfers, zoals -12 of 007. Waarden buiten ±9.007.199.254.740.991 worden gemeld; gebruik voor lange nummers dus een tekstregel met een patroon. |
|---|---|
| Type: getal | Gewone decimale notatie met een punt, zoals 3.5, -0.25 of 1e3. Geen scheidingstekens voor duizendtallen, geen valuta en geen spaties eromheen. Een bedrag als 12,50 uit een Nederlandse export voldoet dus niet. |
| Type: booleaans | true of false, met hoofdletters of kleine letters. 1, 0, yes en no worden gemeld. |
| Type: datum, datum en tijd | Een echte kalenderdatum in de vorm YYYY-MM-DD, dus 2024-02-30 wordt gemeld. Datum en tijd voegt een tijd toe (2024-03-05T09:30, eventueel met seconden en een verschuiving als Z of +02:00). |
| Type: tekst met een opmaak | E-mail (een eenvoudige controle op de vorm name@domain.tld, geen test of het adres bestaat), URI (een absolute URL met een schema) of UUID (versies 1 tot en met 8). |
| Verplicht | De waarde mag niet leeg zijn. Zonder deze regel komen lege waarden door elke andere regel heen. |
| Uniek | Geen waarde mag in de kolom terugkomen. Het rapport noemt de rij waar de waarde voor het eerst voorkwam. Lege waarden worden niet vergeleken. |
| Toegestane waarden | De waarde moet precies gelijk zijn aan een van de opgegeven waarden, inclusief hoofdletters en spaties. |
| Minimum, maximum | Grenzen (inclusief) voor kolommen met gehele of decimale getallen, of ISO-datums voor kolommen met datum of datum en tijd. |
| Minimum- en maximumlengte | Geteld in Unicode-tekens, dus é en 日 tellen elk als één. |
| Patroon | Een reguliere expressie die op de hele waarde moet passen, zoals Table Schema voorschrijft, bijvoorbeeld [A-Z]{2}\d{4}. De vergelijking is hoofdlettergevoelig. |
Een regel geldt voor de kolom waarvan de naam er precies mee overeenkomt; regels voor kolommen die niet in het bestand staan, worden overgeslagen. Je kunt de regels opslaan als JSON-bestand in Table Schema-formaat en ze bij de volgende export weer laden. Onbekende typen en sleutels in een geladen schema worden genegeerd.
Het rapport lezen
- Rijnummers tellen de gegevensrecords na de kopregel (de kopregel is rij 0). Een waarde met een regeleinde tussen aanhalingstekens is nog steeds één record, dus een rijnummer kan afwijken van het regelnummer in een teksteditor.
- Elk probleem noemt de kolom en citeert de waarde, zodat je ernaar kunt zoeken in de CSV-viewer of de editor.
- Fouten breken de structuur of een regel; waarschuwingen wijzen op gegevens die geldige CSV zijn, maar vaak problemen geven bij een import.
- Er worden maximaal 5.000 problemen opgesomd. Daarboven worden de totalen per soort probleem nog wel geteld, en staat bij de lijst dat hij is ingekort.
Limieten en privacy bij het valideren
De validator leest één record tegelijk. Bestanden boven de interactieve grens van 25 MB worden daarom in delen gecontroleerd in een achtergrondproces, met voortgang en de mogelijkheid om te annuleren. In die modus worden records met minder velden dan de kopregel voorlopig eerst aangevuld, zodat alleen records met extra velden als fout in het aantal velden worden gemeld.
Het valideren gebeurt in je browser. Het CSV-bestand wordt niet naar een server geüpload.
Voorbeeld: een export van aanmeldingen gecontroleerd met vier regels
Een export van aanmeldingen, gecontroleerd met vier regels: id is een verplicht, uniek geheel getal; email is verplichte tekst in e-mailopmaak; signup_date is een datum; plan staat basic, pro en team toe. Het resultaat is het rapport van de validator, met na de samenvatting één probleem per regel: een onmogelijke datum, een e-mailadres zonder domeinextensie, Pro met een verkeerde hoofdletter, een herhaalde id, een ontbrekend e-mailadres, en team met een spatie achteraan, wat zowel een waarschuwing oplevert als geen toegestane waarde is.
id,email,signup_date,plan 1,ana@example.com,2024-02-30,pro 2,kim@example,2024-03-01,Pro 2,bao@example.com,2024-03-04,basic 4,,2024-03-05,team
{"rows":4,"errors":6,"warnings":1,"truncated":false}
{"code":"type","row":1,"column":"signup_date","value":"2024-02-30","params":{"type":"date"}}
{"code":"format","row":2,"column":"email","value":"kim@example","params":{"format":"email"}}
{"code":"enum","row":2,"column":"plan","value":"Pro","params":{"allowed":"basic, pro, team"}}
{"code":"unique","row":3,"column":"id","value":"2","params":{"first":2}}
{"code":"whitespace","row":4,"column":"plan","value":"team ","params":{}}
{"code":"required","row":4,"column":"email","value":"","params":{}}
{"code":"enum","row":4,"column":"plan","value":"team ","params":{"allowed":"basic, pro, team"}}Vragen en antwoorden
Waarom wordt een waarde met spaties gemeld bij een lijst met toegestane waarden?
Regels vergelijken de waarde precies zoals die er staat, zonder spaties weg te halen, dus team is niet team. Haal de spaties in die kolom weg met CSV-gegevens opschonen of herstel de export.
Verandert valideren mijn bestand?
Nee. Het bestand wordt alleen gelezen, en het rapport meldt wat er gevonden is. Herstel de problemen in de editor of in het bronsysteem.
Kan ik dezelfde regels gebruiken voor elke maandelijkse export?
Ja. Sla de regels op als Table Schema-JSON-bestand en laad dat de volgende keer. Regels worden op naam aan kolommen gekoppeld.