דילוג לתוכן המרכזי
מודול 8 · שיעור 2 מתוך 430/32 בקורס~15 min
שיעורי מודול (2/4)

אתגר: מנתח CSV

פורמט CSV (ערכים מופרדים בפסיקים) נמצא בכל מקום: יצוא מ-Excel, dump מסדי נתונים, פלט מכלי שורת הפקודה. ניתוח זה הוא אתגר קטן המשלב פיצול, מפה, הסרת מבנה, ובניית חפצים.

הפורמט

קובץ 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טוען...

הגדר `parseCSV(csv)` שלוקח מחרוזת CSV (שורה ראשונה = כותרת, פסיקים כמפריד). החזר מערך של אובייקטים עם מקשי הכותרת. כל הערכים נשארים כמחרוזות. התעלם משורות ריקות.

טוען עורך...
הצג רמז

פיצול בשורה חדשה, שורה ראשונה = כותרת, מפה מעל השאר, Object.fromEntries.

הפתרון זמין לאחר 3 ניסיונות

סקירת התרגיל

פעילות גופנית#js.m8.l2.e2
ניסיונות: 0טוען...

הגדר `columnMean(csv, columnName)` שמנתח את ה-CSV, ממיר את ערכי העמודה למספרים ומחזיר את הממוצע שלהם (מספר). אם אין שורות נתונים החזר 0.

טוען עורך...
הצג רמז

מצא את אינדקס העמודות, מפה שורות ← מספר, צמצם לסכום, חלק באורך.

הפתרון זמין לאחר 3 ניסיונות