Чтение онлайн

на главную - закладки

Жанры

Программирование на языке Ruby
Шрифт:

"name","age","salary"

"mark",29,34500

"joe",42,32000

"fred",22,22000

"jake",25,24000

"don",32,52000

Другая программа может прочитать этот файл:

require 'csv'

CSV.open('data.csv', ' r') do |row|

 p row

end

# Выводится:

# ["name", "age", "salary"]

# ["mark", "29", "34500"]

# ["joe", "42", "32000"]

# ["fred", "22", "22000"]

# ["jake", "25", "24000"]

# ["don", "32", "52000"]

Этот фрагмент можно было бы записать и без блока, тогда метод

open
просто вернул бы объект-читатель. Затем можно было бы вызвать метод
shift
читателя (как если бы это был массив) для получения очередной строки. Но блочная форма мне представляется более естественной.

В библиотеке есть и более развитые средства, а также вспомогательные методы. Для получения дополнительной информации обратитесь к сайту ruby-doc.org или архиву приложений Ruby.

10.2.6. Маршалинг в формате YAML

Аббревиатура YAML означает «YAML Ain't Markup Language» (YAML — не язык разметки). Это не что иное, как гибкий, понятный человеку формат хранения данных. Он напоминает XML, но «красивее».

Затребовав директивой

require
библиотеку
yaml
, мы добавляем в каждый объект метод
to_yaml
. Поучительно будет посмотреть на результат вывода в этом формате нескольких простых и более сложных объектов.

require 'yaml'

str = "Hello, world"

num = 237

arr = %w[ Jan Feb Mar Apr ]

hsh = {"This" => "is", "just a"=>"hash."}

puts str.to_yaml

puts num.to_yaml

puts arr.to_yaml

puts hsh.to_yaml

# Выводится:

# --- "Hello, world"

# --- 237

# ---

# - Jan

# - Feb

# - Mar

# - Apr

# ---

# just a: hash.

# This: is

Обратным по отношению к

to_yaml
является метод
YAML.load
, который принимает в качестве параметра строку или поток.

Предположим, что имеется такой файл

data.yaml
:

– --

– "Hello, world"

– 237

– Jan

– Feb

– Mar

– Apr

 just a: hash.

 This: is

Это те же четыре элемента данных, которые мы видели раньше, только они сгруппированы в единый массив. Если загрузить этот поток, то получим массив-

require 'yaml'

file = File.new("data.yaml")

array = YAML.load(file)

file.close

p array

# Выводится:

# ["Hello, world", 237, ["Jan", "Feb", "Mar", "Apr"],

# {"just a"=>"hash.", "This"=>"is"} ]

В общем и целом YAML — еще один способ выполнить маршалинг объектов. На верхнем уровне его можно использовать для самых разных целей. Например, человек может не только читать данные в этом формате, но и редактировать их, поэтому его естественно применять для записи конфигурационных файлов и т.п.

YAML позволяет и многое другое, о чем мы не можем здесь рассказать. Дополнительную информацию вы найдете на сайте ruby-doc.org или в справочном руководстве.

10.2.7. Преобладающие объекты и библиотека Madeleine

В некоторых кругах популярна идея преобладающих объектов (object prevalence). Смысл ее в том, что память дешева и продолжает дешеветь, а базы данных в большинстве своем невелики, поэтому о них можно вообще забыть и хранить все объекты в памяти.

Классической реализацией является пакет Prevayler, написанный на языке Java. Версия для Ruby называется Madeleine.

Madeleine годится не для всех приложений. У методики преобладающих объектов есть собственные правила и ограничения. Все объекты должны, во-первых, помещаться в памяти; во-вторых, быть сериализуемы.

Объекты должны быть детерминированы, то есть вести себя одним и тем же образом при получении одних и тех же данных. (Следовательно, применение системного таймера или случайных чисел оказывается под вопросом.)

Объекты должны быть по возможности изолированы от ввода/вывода (файлов и сети). Обычно весь ввод/вывод выполняется вне системы преобладающих объектов.

Наконец, любая команда, которая изменяет состояние системы преобладающих объектов, должна иметь вид объекта-команды (то есть для таких объектов тоже должна иметься возможность сериализации и сохранения).

Madeleine предлагает два основных метода доступа к системе объектов. Метод

execute_query
позволяет выполнить запрос или получить доступ для чтения. Метод
execute_command
инкапсулирует любую операцию, которая изменяет состояние объектов в системе.

Поделиться:
Популярные книги

Барон Бранд Берс. Том 1

Limonad
1. Бранд Берс
Проза:
магический реализм
5.00
рейтинг книги
Барон Бранд Берс. Том 1

Воин

Колосов Дмитрий
2. Атланты
Фантастика:
научная фантастика
7.33
рейтинг книги
Воин

Санта-Хрякус

Пратчетт Терри Дэвид Джон
20. Плоский мир
Фантастика:
юмористическая фантастика
9.04
рейтинг книги
Санта-Хрякус

Золото бунта

Иванов Алексей Викторович
Приключения:
исторические приключения
7.50
рейтинг книги
Золото бунта

Эволюционер из трущоб. Том 6

Панарин Антон
6. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Эволюционер из трущоб. Том 6

Рубеж. Пентакль

Дяченко Марина и Сергей
6. Большая серия русской фантастики
Фантастика:
научная фантастика
7.00
рейтинг книги
Рубеж. Пентакль

Кухня народов СССР

Фельдман Исай Абрамович
Дом и Семья:
кулинария
7.00
рейтинг книги
Кухня народов СССР

Я все еще царь. Книга XXXI

Дрейк Сириус
31. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Я все еще царь. Книга XXXI

Виконт. Книга 2. Обретение силы

Юллем Евгений
2. Псевдоним `Испанец`
Фантастика:
боевая фантастика
попаданцы
рпг
7.10
рейтинг книги
Виконт. Книга 2. Обретение силы

Дырка для ордена; Билет на ладью Харона; Бремя живых

Звягинцев Василий
Фантастика:
альтернативная история
фэнтези
8.12
рейтинг книги
Дырка для ордена; Билет на ладью Харона; Бремя живых

Барон Бранд Берс. Том 3

Limonad
3. Бранд Берс
Проза:
магический реализм
5.00
рейтинг книги
Барон Бранд Берс. Том 3

Фамильяр

Романов Андрей Вениаминович
Фантастика:
фэнтези
7.38
рейтинг книги
Фамильяр

Избранное

Зощенко Михаил Михайлович
Фантастика:
альтернативная история
8.00
рейтинг книги
Избранное

Сага о Копье: Омнибус. Том I

Уэйс Маргарет
1. Сага о Копье
Фантастика:
фэнтези
6.25
рейтинг книги
Сага о Копье: Омнибус. Том I