মডিউল পাঠ (2/4)
চ্যালেঞ্জ: CSV পার্সার
CSV বিন্যাস (কমা-বিচ্ছিন্ন মান) সর্বত্র রয়েছে: এক্সেল থেকে রপ্তানি, ডাটাবেস ডাম্প, কমান্ড-লাইন সরঞ্জাম থেকে আউটপুট। এটিকে পার্স করা একটি ছোট চ্যালেঞ্জ যা বিভক্ত, মানচিত্র, বিনাশ, এবং বস্তু নির্মাণ।
বিন্যাস
একটি ন্যূনতম CSV হল একটি মাল্টি-লাইন স্ট্রিং: প্রথম সারি হল হেডার (কলামের নাম), তারপর একটি কমা দ্বারা পৃথক ক্ষেত্র সহ রেকর্ড প্রতি সারি।
nome,eta,citta
Alice,30,Roma
Bob,25,Milano
ক্লাসিক লক্ষ্য হল এটিকে বস্তুর অ্যারেতে পরিণত করা:
[
{ nome: 'Alice', eta: '30', citta: 'Roma' },
{ nome: 'Bob', eta: '25', citta: 'Milano' },
];3-পদক্ষেপের রেসিপি
- লাইন দ্বারা স্ট্রিংটিকে **বিভক্ত করুন:
csv.split('\n') - শিরোনাম সারি **এক্সট্র্যাক্ট করুন: প্রথম লাইন, কমা দ্বারা বিভক্ত
- মানচিত্র একটি অবজেক্টের প্রতিটি অবশিষ্ট রেখা, ম্যাচিং হেডারের সাথে প্রতিটি ক্ষেত্র জোড়া
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;
});
}আরো আধুনিক বিকল্প:
const record = Object.fromEntries(intestazione.map((nome, i) => [nome, campi[i]]));রূপান্তর প্রকার
পার্স করা ক্ষেত্র সবসময় স্ট্রিং হয়। আপনি যদি জানেন যে কিছু কলাম হল সংখ্যা:
record.eta = Number(record.eta);অথবা একটি ছোট "স্কিমা" লিখুন:
const numeriche = new Set(['eta', 'prezzo']);
intestazione.forEach((nome, i) => {
const v = campi[i];
record[nome] = numeriche.has(nome) ? Number(v) : v;
});চেষ্টা করে দেখুন
`parseCSV(csv)` সংজ্ঞায়িত করুন যা একটি CSV স্ট্রিং নেয় (প্রথম সারি = হেডার, বিভাজক হিসাবে কমা)। হেডার কী দিয়ে বস্তুর একটি অ্যারে ফেরত দিন। সমস্ত মান স্ট্রিং হিসাবে থাকে। খালি সারি উপেক্ষা করুন.
ইঙ্গিত দেখান
নিউলাইনে বিভক্ত, প্রথম সারি = শিরোনাম, বাকিদের উপর মানচিত্র, Object.fromEntry.
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ
ব্যায়াম পর্যালোচনা করুন
`columnMean(csv, columnName)` সংজ্ঞায়িত করুন যা CSV পার্স করে, কলামের মানকে সংখ্যায় রূপান্তর করে এবং তাদের গড় (একটি সংখ্যা) প্রদান করে। কোন ডেটা সারি না থাকলে 0 রিটার্ন করুন।
ইঙ্গিত দেখান
কলামের সূচী খুঁজুন, ম্যাপ সারি → সংখ্যা, যোগফল কমিয়ে দিন, দৈর্ঘ্য দিয়ে ভাগ করুন।
সমাধান 3 প্রচেষ্টার পরে উপলব্ধ