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 csv

csv – це комплексний пакет для роботи з CSV форматом у Node.js, що забезпечує генерацію, парсинг, перетворення та серіалізацію даних.

Читання файлів CSV

Перш ніж читати CSV-файл, створюю в корені проекту файл persons.csv з наступною структурою даних:

Name,Email,Phone
John Doe,j.doe@test.com,1234567890
Jane Smith,j.smith@test.com,9876543210

JavaScript код для читання файлу 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


Мітки: