العمل مع CSV في Node.js: مكتبات csv-parser و csv-writer
CSV (قيم مفصولة بفواصل) — أحد أكثر التنسيقات شيوعًا لتخزين وتبادل البيانات الجدولية. في نظام Node.js البيئي، توجد العديد من الأدوات للعمل مع هذا التنسيق. في هذه المقالة، سنستعرض مكتبتين من الأكثر ملاءمة وخفة: csv-parser للقراءة و csv-writer لكتابة ملفات CSV.
تثبيت المكتبات
للبدء، قم بتثبيت كلتا المكتبتين عبر npm:
npm install csv-parser csv-writerقراءة ملفات CSV باستخدام csv-parser
تقوم مكتبة csv-parser بتحويل بيانات CSV إلى تدفق من كائنات JavaScript. تعمل استنادًا إلى Node.js Streams، مما يسمح بمعالجة فعالة حتى للملفات الكبيرة جدًا دون تحميلها بالكامل في الذاكرة.
مثال أساسي للقراءة
لننشئ ملفًا باسم users.csv بالمحتوى التالي:
name,age,cityآنا,28,موسكوإيفان,35,سانت بطرسبرغماريا,22,قازانالآن لنقرأه باستخدام csv-parser:
const fs = require('fs');const csv = require('csv-parser');
const results = [];
fs.createReadStream('users.csv') .pipe(csv()) .on('data', (data) => results.push(data)) .on('end', () => { console.log('عدد السجلات المقروءة:', results.length); console.log('أول سجل:', results[0]); // الإخراج: { name: 'آنا', age: '28', city: 'موسكو' } });تخصيص الفاصل والعناوين
يدعم csv-parser إعدادات متنوعة. على سبيل المثال، إذا كان ملف CSV الخاص بك يستخدم الفاصلة المنقوطة كفاصل:
fs.createReadStream('users.csv') .pipe(csv({ separator: ';' })) .on('data', (row) => console.log(row));إذا لم يكن في الملف عناوين، يمكنك تحديدها يدويًا:
fs.createReadStream('data.csv') .pipe(csv({ headers: ['id', 'product', 'price'] })) .on('data', (row) => console.log(row));كتابة ملفات CSV باستخدام csv-writer
تتيح مكتبة csv-writer إنشاء ملفات CSV من مصفوفات الكائنات. تدعم ترميزات وفواصل مختلفة.
إنشاء ملف CSV بسيط
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({ path: 'output.csv', header: [ { id: 'name', title: 'الاسم' }, { id: 'age', title: 'العمر' }, { id: 'city', title: 'المدينة' } ]});
const records = [ { name: 'آنا', age: 28, city: 'موسكو' }, { name: 'إيفان', age: 35, city: 'سانت بطرسبرغ' }, { name: 'ماريا', age: 22, city: 'قازان' }];
csvWriter.writeRecords(records) .then(() => console.log('تم إنشاء ملف CSV بنجاح'));إعدادات إضافية لـ csv-writer
يمكنك تغيير فاصل الحقول، وإضافة BOM لعرض صحيح للسيريلية في Excel، وتحديد الترميز:
const createCsvWriter = require('csv-writer').createObjectCsvWriter;
const csvWriter = createCsvWriter({ path: 'output_utf8.csv', header: [ { id: 'name', title: 'الاسم' }, { id: 'age', title: 'العمر' } ], fieldDelimiter: ';', alwaysQuote: true, encoding: 'utf8'});مثال عملي: تحويل JSON إلى CSV
غالبًا ما تظهر مهمة تحويل بيانات JSON إلى تنسيق CSV. إليك مثال كامل:
const fs = require('fs');const createCsvWriter = require('csv-writer').createObjectCsvWriter;
// البيانات المصدرconst jsonData = [ { id: 1, product: 'لابتوب', price: 75000, quantity: 10 }, { id: 2, product: 'فأرة', price: 1500, quantity: 50 }, { id: 3, product: 'لوحة مفاتيح', price: 3500, quantity: 30 }];
// إعداد كاتب CSVconst csvWriter = createCsvWriter({ path: 'products.csv', header: [ { id: 'id', title: 'المعرف' }, { id: 'product