Lekcje modułu (2/4)
Wyzwanie: parser CSV
Format CSV (Comma-Separated Values) jest powszechny: eksporty z Excela, zrzuty z baz danych, dane wyjściowe narzędzi wiersza poleceń. Parsowanie go to małe wyzwanie łączące metody split, map, destructuring oraz budowanie obiektów.
Format
Minimalny plik CSV to ciąg wielolinijkowy: pierwsza linia to nagłówek (nazwy kolumn), po której następuje jedna linia na rekord z polami rozdzielonymi przecinkami.
nome,eta,citta
Alice,30,Roma
Bob,25,Milano
Klasycznym celem jest przekształcenie go w tablicę obiektów:
[
{ nome: 'Alice', eta: '30', citta: 'Roma' },
{ nome: 'Bob', eta: '25', citta: 'Milano' },
];Przepis w 3 krokach
- Podziel ciąg znaków na linie:
csv.split('\n') - Wyodrębnij linię nagłówka: pierwsza linia podzielona według przecinków
- Zmapuj każdą pozostałą linię na obiekt, przypisując każde pole do odpowiadającego mu nagłówka
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;
});
}Nowocześniejsze alternatywy:
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));Konwersja typów
Sparsowane pola są zawsze ciągami znaków. Jeśli wiesz, że niektóre kolumny to liczby:
record.eta = Number(record.eta);Możesz też napisać prosty „schemat”:
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
const v = campi[i];
record[nome] = numeriche.has(nome) ? Number(v) : v;
});Spróbuj sam
Zdefiniuj funkcję `parseCSV(csv)`: przyjmuje ciąg znaków w formacie CSV (pierwsza linia = nagłówek, przecinki jako separator). Zwraca tablicę obiektów z kluczami z nagłówka. Wszystkie wartości pozostają ciągami znaków. Ignoruj puste linie.
Pokaż wskazówkę
split su newline, prima riga = intestazione, map sulle altre, Object.fromEntries.
Rozwiązanie dostępne po 3 próbach
Ćwiczenie powtórzeniowe
Zdefiniuj funkcję `columnMean(csv, columnName)`: parsuje plik CSV, konwertuje wartości danej kolumny na liczby i zwraca ich średnią (liczba). Jeśli nie ma linii z danymi, zwraca 0.
Pokaż wskazówkę
Trova l'indice della colonna, mappa righe → Number, reduce somma, dividi per length.
Rozwiązanie dostępne po 3 próbach