Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Болотская Методическое пособие по исползованию кодов обработки 2010

.pdf
Скачиваний:
15
Добавлен:
16.08.2013
Размер:
591.64 Кб
Скачать

DICT Студенты ‘День_рождения’… dictionary-code a attribute-count 5

input-conversion d

Рис. 6. Фрагмент записи описания атрибута «День_рождения» файла «Студенты»

Вводится в анкету студента

Значение поля Item<5>

10/06/93

9293

Рис. 7. Преобразование при вводе на примере даты

Декларируется, что в атрибуте «input conversion» могут использоваться многие коды. Их можно просмотреть при формировании записи описания атрибута средствами UPDATE-процессора, установив курсор на атрибут «input conversion» и нажав «F1».

При выполнении лабораторных работ реально используются только три кода: «d», «x» и «call».

Код обработки «x» показывает, что декларируемый атрибут вычисляемый, т.е. его приходится вычислять каждый раз при обращении к нему в процессорах UPDATE и ACCESS. При вызове вычисляемого атрибута в процессоре UPDATE просмотреть его можно, но изменить нельзя – курсор не устанавливается на соответствующее значение.

Очень часто на одном и том же поле приходится объявлять несколько атрибутов. Для примера рассмотрим поле № 3 записи файла «Группы». В этом поле хранятся номера зачеток студентов, входящих в группу, которые можно преобразовать с помощью вычисляемых атрибутов в другие характеристики студента. Все эти атрибуты в «input conversion» должны иметь код «x».

Код обработки «call» используется при определении атрибутов, требующих оригинального ввода или модификации данных средствами UPDATE-процессора. Нестандартное преобразование, представленное вызываемой подпрограммой, инициируется после ввода данных и нажатия клавиши <Enter>, когда подпрограмме передается введенное значение.

11

Заметим, что когда в ADI вызывается подпрограмма, то ей всегда в качестве параметра передается текущее значение поля, в то время как в FDI в качестве параметра передается вся запись в формате динамического массива.

2.2.Коды обработки в атрибутах «output conversion» и «correlative» ADI

Список кодов обработки для этих атрибутов абсолютно одинаков. Решение вопроса о том, в какой атрибут поместить код, зависит исключительноотпорядка выполнениясоответствующихпроцессов.

Атрибут «output conversion» записи описания атрибута отвечает за постпроцессорную обработку данных, а атрибут «correlative» – за предпроцессорную.

Для UPDATE-процессора это означает, что процессы, инициируемые кодами обработки в атрибуте «output conversion», идут после окончания процессов, инициируемых кодами обработки в атрибуте «correlative». Например, код, вычисляющий средний возраст студенческой группы (в днях), должен быть помещен в атрибут «correlative», а представление полученного числа – в «output conversion».

Для ACCESS-процессора ситуация более сложная, рассмотрим ее на примере атрибутов «Возраст» и «Dob» (День_рождения).

Рассмотрим сначала атрибут «Возраст». Этот атрибут определяется на поле № 5 файла «Студенты» с помощью следующего алгебраического выражения:

a;(d – 5)/”365”

где «a;» – код алгебраического выражения; «d» – текущая дата во внутреннем представлении; цифра 5 представляет не саму себя (это не литерал, это номер поля), а значение поля № 5. Литерал ”365” представляет число дней в году.

Рассмотрим команду для ACCESS-процессора, выполняющую сортировку файла «Студенты» по возрасту:

:sort Студенты by Возраст

12

Если алгебраический код будет помещен в атрибут «correlative», то файл будет отсортирован по возрастанию возраста студента. Преобразование даты рождения в возраст будет производиться до выполнения сортировки.

Если алгебраический код будет помещен в атрибут «output conversion», то файл будет отсортирован по убыванию возраста, так как фактическая сортировка будет производиться по дате рождения. Преобразование даты рождения в возраст будет производиться после сортировки.

Результаты представлены в прил. 1.

Рассмотрим теперь атрибут «Dob». Этот атрибут также определен на поле № 5 файла «Студенты», но в запись его определения включен атрибут «input conversion» со значением «d».

Рассмотрим команду для ACCESS-процессора, выполняющую сортировку файла «Студенты» по дням рождения:

:sort Студенты by Dob

Если код «d2/» (преобразование даты во внешний вид) будет помещен в атрибут «output conversion», то файл будет отсортирован по дате рождения. Если при этом усложнить задачу и ограничить студентов по возрасту:

:sort Студенты by Dob if Dob >= 01.01.90

то ACCESS-процессор обработает этот запрос абсолютно правильно, преобразовав константу «01.01.90» во внутреннее представление.

Если код «d2/» помещен в атрибут «correlative», то файл будет отсортирован в соответствии с лексикографическим порядком строк формата dd/mm/yy. Очевидно, что последний результат никакого отношения к упорядочению по датам рождения не имеет.

Результаты выполнения различных запросов можно посмотреть в прил. 1.

13

2.3.Особенности работы

с кодами в процессорах ACCESS и UPDATE

Обработка атрибутов, определенных над пустыми полями. В

СУБД D3 любое поле записи файла может иметь несколько значений. Соответственно, и атрибут, определенный на этом поле, должен иметь ровно такое же количество значений. Это не зависит от вида функционального преобразования, определенного в атрибуте с помощью кодов обработки. Это положение справедливо как для процессора ACCESS, так и для процессора UPDATE, кроме одного случая – пустого поля.

Для пустого поля процессор ACCESS всегда дает пустое значение атрибута, а процессор UPDATE – значение атрибута для однозначного поля, принимая пустоту за значение.

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

Рассмотрим пример (рис. 8, 9, 10), определяя атрибут с кодом обработки «a;s(3 = 3)» в «correlative» над разными полями записи файла «Группы». Это функциональное преобразование подсчитывает количество значений в многозначном поле № 3.

Запись файла «Группы»

000

К06-221

// ключ записи (Item_ID)

001

К06-221

// код группы

002

22

// код кафедры

003

121]123]125]127

// номера зачеток студентов

Рис.8. Запись из области данных файла «Группы»

Номера полей:

1

3

4

Значения атрибута:

4

4

4

 

 

3

 

 

 

2

 

 

 

1

 

Рис. 9. Значения атрибута с кодом обработки «a;s(3 = 3)» в «correlative», определенного над разными полями записи файла «Группы»,

вычисленные в процессоре UPDATE

14

Номера полей:

1

3

4

Значения атрибута:

4

4

 

 

 

3

 

 

 

2

 

 

 

1

 

Рис. 10. Значения атрибута с кодом обработки «a;s(3 = 3)»

в «correlative», определенного над разными полями записи файла «Группы», вычисленные в процессоре ACCESS

Вычисленные значения (см. рис. 9, 10) полностью совпадают, кроме поля № 4, которого нет в записи (см. рис. 8). Из рисунков также видно, что принципиально однозначный атрибут «Количество студентов в группе» нельзя определять на многозначном поле. В данном случае поле № 1 – код группы – однозначное; именно на нем получается правильное значение вычисляемого атрибута.

Обработка ассоциаций с вычисляемыми атрибутами. На рис. 11 показан экран процессора UPDATE,отрабатывающего команду

:u Группы ‘K06-221’ Ngr Dep QtySt Nz Fio Ph Home

Группы

'К06-221' size = 176

 

 

 

 

Группа

К06-221

 

 

 

 

Кафедра

22

 

 

 

 

В группе

4 студентов:

Телефон

Место_жител

Зачетка Фамилия_Имя

121

Щукина Анна

8

916

235-34-56

Москва

123

Черняева Александра

8

916

333-45-67

Москва

125

Буздавина Мария

8

916

375-23-92

Общежитие

127

Миненок Александр

8

903

234-12-34

Общежитие

Рис. 11. Запись файла «Группы» с ассоциацией вычисляемых атрибутов в процессоре UPDATE

Атрибуты

// control

Nz – Зачетка

Fio – Фамилия_Имя

// dependent

Ph - Телефон

// dependent

Home – Место_жительства

// dependent

 

15

 

определенные на поле № 3, образуют ассоциацию, которая кодируется так, как показано на рис. 12.

attribute-name:

Nz

Fio

Ph

Home

attribute-count:

3

3

3

3

structure:

c;

d;3

d;3

d;3

Рис. 12. Кодировка ассоциации для атрибутов, определяемых на одном и том же поле

Такая кодировка, поддерживаемая процессором UPDATE (см. рис. 11), не поддерживается процессором ACCESS (рис. 13):

:list Группы ‘K06-221’ Ngr Dep QtySt Nz Fio Ph Home

Группа

 

К06-221

 

 

Кафедра

 

22

 

 

 

В группе

4 студентов:

127

Зачетка

 

121

123

125

[405] 1

items listed out of 1

items.

 

Рис. 13. Запись файла «Группы» с ассоциацией вычисляемых атрибутов в процессоре ACCESS

Для процессора ACCESS в подобном случае надо определить дополнительные вычисляемые атрибуты, не связывая их в ассоциацию. В прил. 1 приведены все описания и примеры работы в про-

цессорах ACCESS и UPDATE.

Список рекомендуемой литературы

1.СУБД D3 для пользователей, http://www.infologic.com

2.Roberts J. Calling BASIC from AP Dictionaries. PICKWORD, July/August, 1993.

3.Vaskevitch D., Two Steps Forward, One Step Back, BYTE, May

1992.

16

Приложение 1

Демонстрационная база данных, работающая под управлением СУБД D3, представлена двумя файлами «Студенты» и «Группы».

Файл «Студенты» создан командой:

:create-file Студенты 1 1

Запись описания файла (FDI) «Студенты» находится в словаре файла «dict Студенты», она определяется командой

:ud Студенты

DICT Студенты 'Студенты' size = 145

dictionary-code

d

base

1583

modulo

1

structure

 

retrieval-lock

 

update-lock

 

output-conversion

call Проверка

correlative

 

ida1

attribute-type

bГруппы;6;3

L

column-width

10

input-conversion

call Home

macro

Nz Fa Im Ot Dob Ngr Home Ph

output-macro

Nz ФИО Dob Ngr Home Ph

Записи описания атрибутов (FDI) файла «Студенты» также находятся в словаре файла. Их можно последовательно определять, задав одну команду:

:ud Студенты Nz Fa Im Ot Dob Ngr Home Ph

В этой последовательности эти атрибуты перечислены в «macro» FDI, т.е. это атрибуты «по умолчанию» для UPDATE процессора

macro

Nz Fa Im Ot Dob Ngr Home Ph

17

Запись описания атрибута «Nz» (номер зачетки):

DICT Студенты 'Nz' size = 48 dictionary-code a attribute-count 1 substitute-header Зач structure

output-conversion correlative attribute-type r column-width 3 input-conversion

Запись описания атрибута «Fa» (фамилия студента):

DICT Студенты 'Fa' size = 49 dictionary-code a attribute-count 2 substitute-header Фамилия structure

output-conversion correlative attribute-type l column-width 10 input-conversion

Запись описания атрибута «Im» (имя студента):

DICT Студенты 'Im' size = 44 dictionary-code a attribute-count 3 substitute-header Имя structure

output-conversion correlative attribute-type l column-width 7 input-conversion

Запись описания атрибута «Ot» (отчество студента):

DICT Студенты 'Ot' size = 50 dictionary-code a attribute-count 4 substitute-header Отчество

18

structure output-conversion correlative attribute-type l column-width 10 input-conversion

Запись описания атрибута «Dob» (день рождения студента):

DICT Студенты 'Dob' size = 55 dictionary-code a attribute-count 5 substitute-header ДеньРо structure

output-conversion d0 correlative attribute-type l column-width 7 input-conversion d

Запись описания атрибута «Ngr» (группа студента):

DICT Студенты 'Ngr' size = 48 dictionary-code a attribute-count 6 substitute-header Группа structure

output-conversion correlative attribute-type l column-width 7 input-conversion

Запись описания атрибута «Home» (место жительства студента):

DICT Студенты 'Home' size = 47 dictionary-code a attribute-count 7 substitute-header Живет structure

output-conversion correlative attribute-type l column-width 10 input-conversion

19

Запись описания атрибута «Ph» (телефон студента):

DICT Студенты 'Ph' size = 68 dictionary-code a attribute-count 8 substitute-header Телефон structure

output-conversion ml(# ### ###-##-##) correlative

attribute-type l column-width 15 input-conversion

Для ACCESS процессора атрибуты «по умолчанию» задаются в

«output-macro» FDI:

output-macro

Nz ФИО Dob Ngr Home Ph

Здесь только один новый атрибут «ФИО» (фамилия, имя, отчество студента):

DICT Студенты 'ФИО' size = 88 dictionary-code a attribute-count 2 substitute-header Фамилия_ИО structure

output-conversion a;2:" ":3(t1,1):".":4(t1,1):"." correlative

attribute-type l column-width 15 input-conversion x

Файл «Группы» создан командой:

:create-file Группы 1 1

Запись описания файла (FDI) «Группы» находится в словаре файла «dict Группы», она определяется командой

:ud Группы

DICT Группы 'Группы' size = 116 dictionary-code D attribute-count 6710 substitute-header 1

20

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]