মূল কন্টেন্টে যান
মডিউল 8 · 2-এর পাঠ 4কোর্সে 30/32~15 min
মডিউল পাঠ (2/4)

চ্যালেঞ্জ: CSV পার্সার

CSV বিন্যাস (কমা-বিচ্ছিন্ন মান) সর্বত্র রয়েছে: এক্সেল থেকে রপ্তানি, ডাটাবেস ডাম্প, কমান্ড-লাইন সরঞ্জাম থেকে আউটপুট। এটিকে পার্স করা একটি ছোট চ্যালেঞ্জ যা বিভক্ত, মানচিত্র, বিনাশ, এবং বস্তু নির্মাণ।

বিন্যাস

একটি ন্যূনতম 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.fromEntry.

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ

ব্যায়াম পর্যালোচনা করুন

ব্যায়াম#js.m8.l2.e2
প্রচেষ্টা: 0লোড হচ্ছে...

`columnMean(csv, columnName)` সংজ্ঞায়িত করুন যা CSV পার্স করে, কলামের মানকে সংখ্যায় রূপান্তর করে এবং তাদের গড় (একটি সংখ্যা) প্রদান করে। কোন ডেটা সারি না থাকলে 0 রিটার্ন করুন।

সম্পাদক লোড হচ্ছে...
ইঙ্গিত দেখান

কলামের সূচী খুঁজুন, ম্যাপ সারি → সংখ্যা, যোগফল কমিয়ে দিন, দৈর্ঘ্য দিয়ে ভাগ করুন।

সমাধান 3 প্রচেষ্টার পরে উপলব্ধ