Основы программирования в Linux
Шрифт:
Только третий вариант позволит нам легко изменять формат файлов, что потребуется, если вы когда-либо захотите превратить вашу базу данных в реляционную (более подробную информацию об этом см. в главе 7), поэтому выберем этот вариант.
Далее нужно решить, какие данные помещать в файлы.
Сначала вы выбираете для заголовка каждого компакт-диска хранение следующей информации:
номер компакт-диска в каталоге;
название;
музыкальный стиль (классика, рок, поп, джаз и т.д.);
композитор или исполнитель.
О дорожках вы будете хранить две характеристики:
номер дорожки;
ее название.
Для объединения двух файлов вы должны сопоставить данные о дорожках с остальной информацией о компакт-диске. Для этого будет использоваться номер компакт-диска в каталоге. Поскольку он уникален для каждого диска, он будет появляться однократно в файле с заголовками и один раз для каждой дорожки в файле с данными о дорожках.
В табл. 2.22 показан пример файла с заголовочными данными, а соответствующий ему файл с данными о дорожках может выглядеть так, как представлено в табл. 2.23.
Таблица 2.22
| Catalog | Title | Type | Composer |
|---|---|---|---|
| CD123 | Cool sax | Jazz | Bix |
| CD234 | Classic violin | Classical | Bach |
| CD345 | Hits99 | Pop | Various |
Таблица 2.23
| Catalog | Track No. | Title |
|---|---|---|
| CD123 | 1 | Some jazz |
| CD123 | 2 | More jazz |
| CD234 | 1 | Sonata in D minor |
| CD345 | 1 | Dizzy |
Два файла объединены общим полем
Последнее, что мы должны решить, — способ разделения элементов данных. Поля фиксированной ширины, обычные в реляционных базах, — не всегда самый удобный вариант. Другой распространенный способ, применяемый в данном примере, — запятая (т. е. файл со значениями, разделенными запятыми, или CSV-файл).
В упражнении 2.23 только для того, чтобы вы окончательно не запутались, применяются следующие функции:
1. Сначала в примере сценария как всегда стоит строка, обеспечивающая его выполнение как сценария командной оболочки, за которой следует некоторая информация об авторских правах:
2. Теперь убедитесь, что установлены некоторые глобальные переменные, которые будут использоваться во всем сценарии. Задайте заголовочный файл, файл с данными о дорожках и временный файл и перехватите нажатие комбинации клавиш <Ctrl>+<C> для того, чтобы удалить временный файл, если пользователь прервет выполнение сценария.
3. Определите ваши функции так, чтобы сценарий, выполняясь с первой строки, мог найти все определения функций до того, как вы попытаетесь вызвать любую из них в первый раз. Для того чтобы не повторять один и тот же программный код в нескольких местах, сначала вставьте две функции, служащие простыми утилитами:
Русские горки. Конец Российского государства
Великие противостояния
Научно-образовательная:
история
политика
рейтинг книги
Боярин
3. Ночь Сварога
Приключения:
исторические приключения
рейтинг книги
Эпоха Опустошителя. Том V
5. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
рейтинг книги
Экспансия – I
10. Штирлиц
Детективы:
политические детективы
рейтинг книги
Самоучитель UML
Компьютеры и Интернет:
программирование
прочая компьютерная литература
рейтинг книги
Удельная. Очерки истории
Всё о Санкт-Петербурге
Научно-образовательная:
история
культурология
рейтинг книги
Собрание сочинений в 15 томах. Том 7
Фантастика:
научная фантастика
рейтинг книги
Чехов
1. Адвокат Чехов
Фантастика:
фэнтези
боевая фантастика
альтернативная история
рейтинг книги
Темный карнавал (сборник)
1. Сборники рассказов Рэя Брэдбери
Фантастика:
социально-философская фантастика
научная фантастика
ужасы и мистика
мистика
сказочная фантастика
рейтинг книги
Последний Паладин. Том 5
5. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Туманы Авалона
Шедевры фантастики
Фантастика:
фэнтези
альтернативная история
рейтинг книги