CSV – це формат файлів, котрий використовується для зберігання даних у табличній формі, де кожен рядок файлу являє собою рядок таблиці, а значення в рядках розділені комами або іншими розділювачами, такими як крапка з комою, табуляція, тощо.
Формат CSV широко використовується в комп’ютерних програмах, базах даних, електронних таблицях, оскільки його легко читати і записувати як людині, так і програмному забезпеченню.
Приклад файлу CSV:
Name,LastName,Age,Position
Lara,George,30,Developer
Mary,Johnson,25,Designer
Clinton,Houston,35,ManagerВстановлення залежностей
Попередньо на вашому комп’ютері повинен бути встановлений Node.js (інструкція для Windows).
Встановити пакет для роботи з CSV форматом, можна виконавши наступну команду:
npm install csvcsv – це комплексний пакет для роботи з CSV форматом у Node.js, що забезпечує генерацію, парсинг, перетворення та серіалізацію даних.
Читання файлів CSV
Перш ніж читати CSV-файл, створюю в корені проекту файл persons.csv з наступною структурою даних:
Name,Email,Phone
John Doe,j.doe@test.com,1234567890
Jane Smith,j.smith@test.com,9876543210JavaScript код для читання файлу persons.csv:
const fs = require('fs');
const { parse } = require('csv-parse');
const results = [];
fs.createReadStream('persons.csv')
.pipe(parse({ columns: true }))
.on('data', (row) => {
results.push(row);
})
.on('end', () => {
console.log(results);
console.log('CSV parsing complete');
});В прикладі вище:
- Метод createReadStream з модуля fs – приймає аргументом ім’я файлу та створює потік (stream) для читання. Stream забезпечує спосіб читання даних, без завантаження всього файлу в пам’ять одразу.
- Після створення потоку для читання, метод pipe() що є частиною частиною Stream API Node.js, пересилає фрагменти даних з потоку для читання в інший потік, котрий створюється всередині методу pipe(), під час виклику методу parse() з модуля csv-parse.
- Метод parse() є частиною бібліотеки csv, і використовується для аналізу даних у форматі CSV. Виклик csv.parse() створює парсер, що перетворює текст CSV у структурований і керований формат, наприклад масиви або об’єкти JavaScript.
- Опція columns: true методу parse(), вказує що ми очікуємо записи (рядки) у вигляді об’єктних літералів (за замовчуванням false, і parse() повертає записи у вигляді масивів). Якщо встановлено значення true, парсер буде виводити назви стовпців з першого рядка, в якості імен властивостей об’єкту. Повний перелік опцій методу parse() доступний за посиланням: https://csv.js.org/parse/options/
- Далі, за допомогою наступного методу Stream API Node.js – on(), отримуємо доступ до даних. Параметр row – це фрагмент даних, перетворений методом parse() у JavaScript об’єкт, котрий додається до масиву results.
Результатом виконання програми буде масив об’єктів, де один об’єкт, це один рядок з файлу persons.csv:
[
{ Name: 'John Doe', Email: 'j.doe@test.com', Phone: '1234567890' },
{ Name: 'Jane Smith', Email: 'j.smith@test.com', Phone: '9876543210' },
]Запис файлів CSV
Для запису даних у CSV-файл, будуть використовуватись методи createWriteStream з модуля fs та stringify з модуля csv-stringify:
const fs = require('fs');
const { stringify } = require('csv-stringify');
const writeStream = fs.createWriteStream('users.csv');
const data = [
{ id: 1, name: 'John', age: 25 },
{ id: 2, name: 'Jane', age: 24 },
{ id: 3, name: 'Jim', age: 30 },
];
stringify(data, {
header: true,
columns: {
id: 'ID',
name: 'Name',
age: 'Age',
},
}).pipe(writeStream);В прикладі вище:
- Метод createWriteStream('users.csv') – створює потік запису для файлу 'users.csv', в який будуть записані згенеровані CSV дані.
- Метод stringify() бібліотеки csv, використовується для перетворення масиву JavaScript -об’єктів, у записи формату CSV.
- Опція columns методу stringify() керує створенням записів. Наприклад, columns використовується для надання назв стовпцям у створених записах. Повний перелік опцій методу stringify(), доступний за посиланням: https://csv.js.org/stringify/options/
- Метод pipe(writeStream) надсилає згенеровані CSV-дані до потоку запису writeStream (файл users.csv).
В результаті, буде створено новий файл users.csv з наступними записами:
ID,Name,Age
1,John,25
2,Jane,24
3,Jim,30