CSV формат

Существует достаточно большое кол-во различных текстовых форматов для хранения или передачи данных. Одним из наиболее популярных форматов является .csv. .csv - это простейший формат для создания таблиц. В своей повседневной жизни вы скорее всего чаще всего сталкивались с проприетарными форматами каким является exls в Microsoft Excel. CSV является свободным форматом, который поддерживается всеми программами для работы с таблицами, а также является наиболее популярным форматом для разработчиков6 опять таки из-за своей простоты.

В CSV первая строка файла считается обозначением названий колонок, начинает со второй строки идут значения. Каждая колонка разделяется либо запятом , либо символом точки с запятой ;. Для того, чтобы таблица не ломалась при наличии этим символов в значении используют двойные ковычки ";" для экранирования.

Пример csv файла:

year, score, title
1968, 86, Mama
1976, 99, Taxi
1995, 180, Casino

Работа с CSV в Ruby

В Ruby в стандатрной поставке есть класс для чтения файла с одноименным названием CSV. Для того, чтобы им воспользоваться необходимо добавить require "csv" в начало файла. Теперь можем попробовать прочитать наш файл:

require "csv"

csv_file = CSV.read("6_file_system/2_csv/example.csv") # [[year, score, title], [1968, 86, Mama], ...]

Как можно заметить, в качестве результата мы получаем двумерный массив и работать с ним не очень удобно. Но у нас 1 строка содержит название колонок, значит может сделать по другому:

csv_file = CSV.read("6_file_system/2_csv/example.csv", headers: true) # = CSV::Table

# Получение значений колонки по ее названию
p csv_file["year"] # = [1968, 1976, 1995]

# CSV::Table содержит также итератор, в котором каждая наша колонка может быть представлена как отдельный параметр блока
csv_file.each do |year, score, title|
  puts "year:  #{year}, score: #{score}, title: #{title}"
end

Задание movements

Ниже дано содержание csv файла. Необходимо:

  • написать класс Movements и реализовать в нем 2 метода:

    • get_expense_sum - Получение суммы расхода в рублях по всем организациям

    • get_income_sum - Получение суммы дохода в рублях по всем организациям

  • Код должен выводить сводную информацию по этой выписке: общий приход, общий расход и разбивку расходов.

Примеры работы программы:

Рекомендации:

  • Попробуйте создать для строки отдельный объект, который будет хранить информацию о ней, а сам csv файл как массив этих объектов. Это может упростить работу с csv

  • Парсинг и обработку данных можно провести один раз

  • Курс валюты можете для простоты сделать статичным через константу

Дополнительный материал:

Last updated