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

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

Жанры

Основы программирования в 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

Два файла объединены общим полем

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

Последнее, что мы должны решить, — способ разделения элементов данных. Поля фиксированной ширины, обычные в реляционных базах, — не всегда самый удобный вариант. Другой распространенный способ, применяемый в данном примере, — запятая (т. е. файл со значениями, разделенными запятыми, или CSV-файл).

В упражнении 2.23 только для того, чтобы вы окончательно не запутались, применяются следующие функции:

get_return
;

get_confirm
;

set_menu_choice
;

insert_title
;

insert_track
;

add_record_tracks
;

add_records
;

find_cd
;

update_cd
;

count_cds
;

remove_records
;

list_tracks
.

Упражнение 2.23. Приложение для работы с коллекцией компакт-дисков

1. Сначала в примере сценария как всегда стоит строка, обеспечивающая его выполнение как сценария командной оболочки, за которой следует некоторая информация об авторских правах:

#!/bin/bash

# Очень простой пример сценария командной оболочки для управления

# коллекцией компакт-дисков.

# Copyright (С) 1996-2007 Wiley Publishing Inc.

# Это свободно распространяемое программное обеспечение;

# вы можете распространять эту программу и/или изменять ее

# в соответствии с положениями GNU General Public License,

# документа, опубликованного фондом Free Software Foundation;

# либо версии 2 этой лицензии или (по вашему выбору)

# любой более свежей версии.

# Эта программа распространяется в надежде на ее полезность,

# но WITHOUT ANY WARRANTY, (без каких-либо гарантий);

# даже без предполагаемой гарантии MERCHANTABILITY

# or FITNESS FOR A PARTICULAR PURPOSE (годности

# ее для продажи или применения для определенной цели).

# Более подробную информацию см. в GNU General Public License.

# Вы должны были получить копию GNU General Public License

# вместе с этой программой;

# если нет, пишите в организацию Free Software Foundation,

# Inc. no адресу: 675 Mass Ave, Cambridge, MA 02139, USA.

2. Теперь убедитесь, что установлены некоторые глобальные переменные, которые будут использоваться во всем сценарии. Задайте заголовочный файл, файл с данными о дорожках и временный файл и перехватите нажатие комбинации клавиш <Ctrl>+<C> для того, чтобы удалить временный файл, если пользователь прервет выполнение сценария.

menu_choice=""

current cd=""

title_file="title.cdb"

tracks_file="tracks.cdb"

temp_file=/tmp/cdb.$$

trap 'rm -f $temp_file' EXIT

3. Определите ваши функции так, чтобы сценарий, выполняясь с первой строки, мог найти все определения функций до того, как вы попытаетесь вызвать любую из них в первый раз. Для того чтобы не повторять один и тот же программный код в нескольких местах, сначала вставьте две функции, служащие простыми утилитами:

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

Печать Пожирателя 3

Соломенный Илья
3. Пожиратель
Фантастика:
городское фэнтези
аниме
сказочная фантастика
фэнтези
попаданцы
5.00
рейтинг книги
Печать Пожирателя 3

Жена моего мужа

Донцова Дарья
6. Любительница частного сыска Даша Васильева
Детективы:
иронические детективы
8.30
рейтинг книги
Жена моего мужа

Возвращение

Кораблев Родион
5. Другая сторона
Фантастика:
боевая фантастика
6.23
рейтинг книги
Возвращение

Здравствуй, 1985-й

Иванов Дмитрий
2. Девяностые
Фантастика:
альтернативная история
5.33
рейтинг книги
Здравствуй, 1985-й

Кодекс Охотника. Книга V

Винокуров Юрий
5. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
4.50
рейтинг книги
Кодекс Охотника. Книга V

Экспансия — II

Семенов Юлиан Семенович
11. Штирлиц
Детективы:
исторические детективы
7.78
рейтинг книги
Экспансия — II

Локки 8. Потомок бога

Решетов Евгений Валерьевич
8. Локки
Фантастика:
фэнтези
боевая фантастика
героическая фантастика
попаданцы
5.00
рейтинг книги
Локки 8. Потомок бога

Адская кухня

Дивер Джеффри
3. Джон Пеллэм
Детективы:
триллеры
4.75
рейтинг книги
Адская кухня

Воля и власть

Балашов Дмитрий Михайлович
8. Государи московские
Научно-образовательная:
история
6.29
рейтинг книги
Воля и власть

Имперец. Том 3

Романов Михаил Яковлевич
2. Имперец
Фантастика:
боевая фантастика
попаданцы
альтернативная история
7.50
рейтинг книги
Имперец. Том 3

Газлайтер. Том 12

Володин Григорий Григорьевич
12. История Телепата
Фантастика:
фэнтези
попаданцы
аниме
5.75
рейтинг книги
Газлайтер. Том 12

Отречение

Балашов Дмитрий Михайлович
6. Государи московские
Проза:
историческая проза
6.50
рейтинг книги
Отречение

Газлайтер. Том 16

Володин Григорий Григорьевич
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.50
рейтинг книги
Газлайтер. Том 16

Базис

Владимиров Денис
7. Глэрд
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Базис