Modulelessen (2/4)
Uitdaging: CSV-parser
Het CSV-formaat (Comma-Separated Values) is overal: exporten vanuit Excel, databasedumps, uitvoer van opdrachtregelprogramma's. Het parseren ervan is een kleine uitdaging die split, map, destructureren en objectconstructie.
Het formaat
Een minimale CSV is een tekenreeks van meerdere regels: de eerste rij is de kop (kolomnamen), daarna één rij per record met velden gescheiden door komma's.
nome,eta,citta
Alice,30,Roma
Bob,25,Milano
Het klassieke doel is om er een reeks objecten van te maken:
[
{ nome: 'Alice', eta: '30', citta: 'Roma' },
{ nome: 'Bob', eta: '25', citta: 'Milano' },
];Het 3-stappen recept
- Splits de tekenreeks per regels:
csv.split('\n') - Extraheer de koprij: de eerste regel, gesplitst door komma
- Wijs elke resterende regel toe aan een object, waarbij elk veld wordt gekoppeld aan de overeenkomende koptekst
function parseCSV(csv) {
const righe = csv.split('\n');
const intestazione = righe[0].split(',');
return righe.slice(1).map((riga) => {
const campi = riga.split(',');
const record = {};
intestazione.forEach((nome, i) => {
record[nome] = campi[i];
});
return record;
});
}Modernere alternatieven:
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));Typen converteren
Geparseerde velden zijn altijd tekenreeksen. Als u weet dat sommige kolommen getallen zijn:
record.eta = Number(record.eta);Of schrijf een klein "schema":
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
const v = campi[i];
record[nome] = numeriche.has(nome) ? Number(v) : v;
});Probeer het
Definieer `parseCSV(csv)` waaraan een CSV-tekenreeks moet doorgegeven worden (eerste rij = kop, komma's als scheidingsteken). Retourneer een array met objecten met de header-toetsen. Alle waarden blijven als tekenreeksen. Negeer lege rijen.
Toon hint
splitsen op nieuwe regel, eerste rij = kop, kaart over de rest, Object.fromEntries.
Oplossing beschikbaar na 3 pogingen
Oefening beoordelen
Definieer 'columnMean(csv, columnName)' waarmee de CSV wordt geparseerd, de kolomwaarden worden geconverteerd naar getallen en het gemiddelde ervan (een getal) wordt geretourneerd. Als er geen gegevensrijen zijn, wordt 0 geretourneerd.
Toon hint
Zoek de kolomindex, breng rijen in kaart → Getal, reduceer tot som, deel door lengte.
Oplossing beschikbaar na 3 pogingen