ప్రధాన కంటెంట్‌కు వెళ్లండి
మాడ్యూల్ 8 · 4లో పాఠం 2కోర్సులో 30/32~15 min
మాడ్యూల్ పాఠాలు (2/4)

ఛాలెంజ్: CSV పార్సర్

CSV ఫార్మాట్ (కామాతో వేరు చేయబడిన విలువలు) ప్రతిచోటా ఉంటుంది: Excel నుండి ఎగుమతులు, డేటాబేస్ డంప్‌లు, కమాండ్-లైన్ సాధనాల నుండి అవుట్పుట్. దీన్ని అన్వయించడం స్ప్లిట్, మ్యాప్, కలిపి ఒక చిన్న సవాలు. విధ్వంసం, మరియు వస్తు నిర్మాణం.

ఫార్మాట్

కనిష్ట CSV అనేది బహుళ-లైన్ స్ట్రింగ్: మొదటి అడ్డు వరుస హెడర్ (కాలమ్ పేర్లు), తర్వాత ఒకటి కామాలతో వేరు చేయబడిన ఫీల్డ్‌లతో రికార్డ్‌కు వరుస.

Code
nome,eta,citta
Alice,30,Roma
Bob,25,Milano

క్లాసిక్ లక్ష్యం దానిని వస్తువుల శ్రేణిగా మార్చడం:

JS
[
  { nome: 'Alice', eta: '30', citta: 'Roma' },
  { nome: 'Bob', eta: '25', citta: 'Milano' },
];

3-దశల వంటకం

  1. స్ప్లిట్ లైన్‌ల వారీగా: csv.split('\n')
  2. ఎక్స్‌ట్రాక్ట్ హెడర్ అడ్డు వరుస: మొదటి పంక్తి, కామాతో విభజించబడింది
  3. మ్యాప్ ఒక వస్తువుకు మిగిలిన ప్రతి పంక్తిని, సరిపోలే హెడర్‌తో ప్రతి ఫీల్డ్‌ను జత చేస్తుంది
JS
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;
  });
}

మరిన్ని ఆధునిక ప్రత్యామ్నాయాలు:

JS
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));

మార్పిడి రకాలు

అన్వయించబడిన ఫీల్డ్‌లు ఎల్లప్పుడూ తీగలు. కొన్ని నిలువు వరుసలు సంఖ్యలు అని మీకు తెలిస్తే:

JS
record.eta = Number(record.eta);

లేదా చిన్న "స్కీమా" వ్రాయండి:

JS
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
  const v = campi[i];
  record[nome] = numeriche.has(nome) ? Number(v) : v;
});

దీనిని ప్రయత్నించండి

వ్యాయామం#js.m8.l2.e1
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

CSV స్ట్రింగ్ (మొదటి వరుస = హెడర్, కామాలను సెపరేటర్‌గా) తీసుకునే `parseCSV(csv)`ని నిర్వచించండి. హెడర్ కీలతో వస్తువుల శ్రేణిని తిరిగి ఇవ్వండి. అన్ని విలువలు స్ట్రింగ్‌లుగా ఉంటాయి. ఖాళీ అడ్డు వరుసలను విస్మరించండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

న్యూలైన్‌లో విభజించబడింది, మొదటి వరుస = హెడర్, మిగిలిన వాటిపై మ్యాప్, Object.fromEntries.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది

వ్యాయామం సమీక్షించండి

వ్యాయామం#js.m8.l2.e2
ప్రయత్నాలు: 0లోడ్ అవుతోంది...

CSVని అన్వయించే, నిలువు వరుస విలువలను సంఖ్యలుగా మార్చే మరియు వాటి సగటు (సంఖ్య)ని అందించే `columnMean(csv, columnName)`ని నిర్వచించండి. డేటా అడ్డు వరుసలు లేకుంటే 0ని తిరిగి ఇవ్వండి.

ఎడిటర్ లోడ్ అవుతోంది…
సూచనను చూపించు

కాలమ్ ఇండెక్స్, మ్యాప్ అడ్డు వరుసలు → సంఖ్యను కనుగొనండి, మొత్తానికి తగ్గించండి, పొడవు ద్వారా విభజించండి.

3 ప్రయత్నాల తర్వాత పరిష్కారం లభిస్తుంది