Про Class: CSV у Ruby

У Ruby Class: CSV є частиною стандартної бібліотеки та використовується для роботи з файлами CSV (Comma-Separated Values). Це зручний інструмент для читання, запису та обробки даних у форматі CSV. Клас CSV надає широкий спектр можливостей для роботи з цим популярним форматом даних, зокрема, обробляючи рядки та стовпці таблиці, де значення відділяються комами (або іншими розділювачами).

Можливості Class: CSV у Ruby та варіанти використання

1. Імпорт бібліотеки

Оскільки CSV є частиною стандартної бібліотеки Ruby, ви можете використовувати його без додаткової інсталяції, просто підключивши бібліотеку:

require 'csv'

2. Читання файлу CSV

Найбільш поширене використання CSV — це читання CSV-файлів. Для цього можна скористатися методом CSV.foreach або CSV.read.

  • CSV.foreach: Читає файл построчно та передає кожний рядок як масив.

    CSV.foreach("data.csv") do |row|
      puts row.inspect
    end
    
  • CSV.read: Читає весь файл і повертає двовимірний масив, де кожен підмасив — це рядок CSV.

    data = CSV.read("data.csv")
    puts data.inspect
    

3. Запис у файл CSV

Для запису даних у файл використовується метод CSV.open або CSV.generate.

  • CSV.open: Відкриває файл у певному режимі (write, append тощо) і дозволяє записувати рядки у файл.

    CSV.open("data.csv", "w") do |csv|
      csv << ["Name", "Age", "City"]
      csv << ["John", 30, "New York"]
      csv << ["Jane", 25, "Los Angeles"]
    end
    
  • CSV.generate: Генерує CSV-дані як рядок, який можна зберегти або вивести в консоль.

    csv_string = CSV.generate do |csv|
      csv << ["Name", "Age", "City"]
      csv << ["John", 30, "New York"]
    end
    puts csv_string
    

4. Налаштування розділювача

За замовчуванням, CSV використовує кому як розділювач, але ви можете змінити його на інший символ, наприклад, крапку з комою:

CSV.foreach("data.csv", col_sep: ";") do |row|
  puts row.inspect
end

5. Параметри роботи з CSV

Клас CSV надає різноманітні опції для більш гнучкого налаштування:

  • headers: Дозволяє працювати з файлами CSV, де є заголовки стовпців. Наприклад, можна встановити цю опцію в true для автоматичної обробки заголовків:

    CSV.foreach("data.csv", headers: true) do |row|
      puts row["Name"]
    end
    
  • header_converters: Перетворює заголовки стовпців, наприклад, в символи:

    CSV.foreach("data.csv", headers: true, header_converters: :symbol) do |row|
      puts row[:name]
    end
    

6. Обробка винятків

Якщо CSV-файл має неправильну структуру або виникають інші проблеми, Ruby може підняти винятки, зокрема CSV::MalformedCSVError. Ви можете обробляти ці винятки для захисту коду від помилок:

begin
  CSV.foreach("data.csv") do |row|
    puts row.inspect
  end
rescue CSV::MalformedCSVError => e
  puts "Error reading CSV: #{e.message}"
end

Приклад:

require 'csv'

# Читання CSV-файлу з заголовками
CSV.foreach("data.csv", headers: true) do |row|
  puts "Name: #{row['Name']}, Age: #{row['Age']}, City: #{row['City']}"
end

# Запис у CSV-файл
CSV.open("output.csv", "w") do |csv|
  csv << ["Name", "Age", "City"]
  csv << ["John", 30, "New York"]
  csv << ["Jane", 25, "Los Angeles"]
end