Leçons du module (2/4)
Défi : analyseur CSV
Le format CSV (Comma-Separated Values) est partout : exports Excel, dumps de bases de données, sorties d'outils en ligne de commande. Le parser est un petit défi qui combine split, map, destructuring et construction d'objets.
Le format
Un CSV minimal est une chaîne multiligne : la première ligne est l'en-tête (noms des colonnes), puis une ligne par enregistrement avec les champs séparés par des virgules.
nome,eta,citta
Alice,30,Roma
Bob,25,Milano
L'objectif classique est de le transformer en un tableau d'objets :
[
{ nome: 'Alice', eta: '30', citta: 'Roma' },
{ nome: 'Bob', eta: '25', citta: 'Milano' },
];La recette en 3 étapes
- Séparez la chaîne par lignes :
csv.split('\n') - Extrayez la ligne d'en-tête : la première ligne, découpée par les virgules
- Mappez chaque ligne restante dans un objet, en associant chaque champ à l'en-tête correspondant
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;
});
}Alternatives plus modernes :
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));Convertir les types
Les champs analysés sont toujours des chaînes de caractères. Si vous savez que certaines colonnes contiennent des nombres :
record.eta = Number(record.eta);Ou vous pouvez écrire un petit « schéma » :
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
const v = campi[i];
record[nome] = numeriche.has(nome) ? Number(v) : v;
});À vous de jouer
Définissez `parseCSV(csv)` qui reçoit une chaîne CSV (première ligne = en-tête, virgules comme séparateur). Retourne un tableau d'objets avec les clés de l'en-tête. Toutes les valeurs restent des chaînes de caractères. Ignorez les lignes vides.
Afficher l'indice
split su newline, prima riga = intestazione, map sulle altre, Object.fromEntries.
Solution disponible après 3 tentatives
Exercice de révision
Définissez `columnMean(csv, columnName)` qui parse the CSV, convertit les valeurs de la colonne en nombres et retourne leur moyenne (nombre). S'il n'y a pas de lignes de données, retourne 0.
Afficher l'indice
Trova l'indice della colonna, mappa righe → Number, reduce somma, dividi per length.
Solution disponible après 3 tentatives