Реклама:

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

В этом случае, проиллюстрированном на рис. 6.7, записи в основном файле могут обновляться на своих местах. Файл транзакций В можно читать последовательно, и ключи, идентифицирующие записи в файле В, послужат ключами поиска для необходимых записей в файле А. Когда в файле А понадобится создать новую запись, она будет вставлена «куда надо».

Рис. 6.7. Упорядочение с основным файлом прямого доступа.

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

Кинг Д. Создание эффективного программного обеспечения

Структурированное изложение для этой версии программы будет следующим:

УПОРЯДОЧЕНИЕ поел

Открыть файлы, Читать В

ТЕЛО УПОРЯДОЧЕНИЯ повт пока не Конец файла в файле В

ОБРАБОТКА ЗАПИСИ поел

ОБРАБОТКА ТЕЛА ЗАПИСИ выб услов запись А

«найдена»

ОБРАБОТКА СОПОСТАВЛЯЕМЫХ А + В поел

Писать обновленную А-запись ОБРАБОТКА СОПОСТАВЛЯМЫХ А + В конец ОБРАБОТКА ТЕЛА ЗАПИСИ или услов (Запись А

«не найдена») ОБРАБОТКА НЕСОПОСТАВЛЯЕМОИ В поел

Писать новую А-запись с подробностями первой транзакции ОБРАБОТКА НЕСОПОСТАВЛЯЕМОИ В конец ОБРАБОТКА ТЕЛА ЗАПИСИ конец Читать В ОБРАБОТКА ЗАПИСИ конец ТЕЛО УПОРЯДОЧЕНИЯ конец Закрыть файлы СТОП

УПОРЯДОЧЕНИЕ конец

Конечно, это значительно более простая программа. Условие «найдена» для записи А справедливо, когда в файле А найдена запись, которая соответствует обрабатываемой в текущий момент записи транзакции из файла В. Поиск такой записи в файле А осуществляется прямым доступом с использованием идентификатора записи В в качестве ключа поиска. Ситуация «не найдена» возникает просто тогда, когда для этой транзакции не существует основной записи, т. е. нужно генерировать новую основную запись.

Структура программы для данной версии показана на рис. 6.8.

Упорядочение при более чем двух входных файлах

В рассмотренных до сих пор примерах мы предполагали, что нужно слить только два входных файла. Однако на практике вполне вероятна необходимость упорядочения трех, четырех или даже большего числа входных файлов.

Ю-1068

Как можно воспользоваться полученными нами ранее результатами, чтобы прийти к общему решению?

Кинг Д. Создание эффективного программного обеспечения

Рис. 6.8. Структура программы для упорядочения прямым доступом.

Рассмотрим структуру программы, показанную на рис. 6.6. Эта структура наиболее стандартна в том отношении, что в ней учтены все возможности ситуации с двумя файлами и одной записью на ключ. Что произошло бы с этой структурой, если бы требовалось слить три файла вместо двух?

Возникали бы следующие различные ситуации сопоставимости и несопоставимости:

1. Ключ = А = В = С

2. Ключ = А = В, но не равен С

3. Ключ = А = С, но не равен В


⇐ Предыдущая страница| |Следующая страница ⇒