Parsing af en CSV-fil med JavaScript

Hvad du skal oprette

CSV-filformatet (Comma Separated Values) er en populær måde at udveksle data mellem programmer på. I dette hurtige tip lærer vi, hvordan JavaScript kan hjælpe os med at visualisere dataene i en CSV-fil.

Skabelse af en CSV-fil

Lad os til at begynde med oprette en simpel CSV-fil. For at gøre dette vil vi drage fordel af Mockaroo, en online testdatagenerator. Her er vores fil:

Konvertering af en CSV-fil til en HTML-tabel

Nu da vi har genereret filen, er vi klar til at analysere den og opbygge en tilhørende HTML-tabel.

Som et første skridt bruger vi jQuerys ajax-funktion til at hente dataene fra denne fil:

 $.ajax({ url: 'csv_data.csv', dataType: 'text', }).done(successFunction);

Antages det, at AJAX-forespørgslen er vellykket, udføres successFunction. Denne funktion er ansvarlig for at analysere de returnerede data og omdanne dem til en HTML-tabel:

Det er meningen, at hver af CSV-rækkerne skal konverteres til en tabelrække. Lad os med det i tankerne kort forklare, hvordan ovenstående kode fungerer:

  • Først bruger vi en regex til at opdele AJAX-svaret og dermed adskille CSV-rækkerne.
  • Dernæst itererer vi gennem CSV-rækkerne og opdeler deres datafelter.
  • Sluttelig gennemløber vi datafelterne og opretter de tilsvarende tabelceller.

For at få en bedre forståelse af denne kode kan du desuden overveje følgende visualisering:

På dette tidspunkt er det vigtigt at præcisere, hvorfor vi brugte /\r?\n|\r/-regex til at opdele CSV-rækkerne.

Som du sikkert allerede ved, er der forskellige repræsentationer af en newline på tværs af styresystemer. På Windows-platforme er de tegn, der repræsenterer en newline, f.eks. \r\n. Når det er sagt, er vi ved hjælp af ovenstående regex i stand til at matche alle disse mulige repræsentationer.

Dertil kommer, at de fleste tekstredigeringsprogrammer giver os mulighed for at vælge formatet for en newline. Tag f.eks. Notepad++. I denne editor kan vi angive det ønskede format for et dokument ved at navigere til denne sti:

For at illustrere det kan vi se på vores fil. Afhængigt af det format, vi vælger, ville den se således ud:

Tilføjelse af stilarter til HTML-tabellen

Hvor vi ser på den resulterende tabel, skal vi tilføje et par grundlæggende stilarter til den:

Her er den genererede tabel:

Sådan analyserer du en CSV-fil med Papa Parse-biblioteket

I dette afsnit vil vi se, hvordan du kan bruge Papa Parse-biblioteket til at analysere en CSV-fil i løbet af et øjeblik! Papa Parse er en virkelig kraftfuld CSV-parser, som giver dig en masse konfigurationsmuligheder, og du kan også bruge den til virkelig store CSV-filer.

Papa Parse-biblioteket er tilgængeligt på npm, og hvis du ikke ønsker at bruge npm, kan du i stedet hente den officielle Papa Parse npm-pakke fra unpkg.

Sådan fungerer det

Det følgende eksempel viser, hvor nemt det er at parse en CSV-streng.

var results = Papa.parse(data); // data is a CSV string

Variablen results indeholder følgende indhold.

Som du kan se, indeholder Results.data et array med alle rækker. Hvis der er nogen fejl under parsningen, vil de være i Results.errors. Endelig kan du bruge Results.meta til at få adgang til metainformationer om CSV-strengen.

På den anden side, hvis du ønsker at analysere en lokal CSV-fil direkte, kan du videregive et JavaScript File-objekt:

Papa.parse(fileInput.files, { complete: function(results) { console.log(results); }});

Og du kan også videregive URL’en til en fjern-CSV-fil:

Papa.parse(url, { download: true, complete: function(results) { console.log(results); }});

Afhængigt af den grundlæggende parsing tilbyder Papa Parse en masse andre funktioner som f.eks:

  • streaming af store filer (så du kan behandle dem linje for linje)
  • omvendt parsing (for at udstede CSV fra et JavaScript-objekt)
  • jQuery-integration
  • og meget mere

Jeg opfordrer dig til at udforske dette bibliotek, da det er virkelig kraftfuldt og nemt at bruge!

Konklusion

I denne korte artikel gennemgik vi processen med at konvertere en CSV-fil til en HTML-tabelle. Vi kunne selvfølgelig have brugt et webbaseret værktøj til denne konvertering, men jeg synes, at det altid er mere udfordrende at opnå dette ved at skrive sin egen kode.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.