Реклама:

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

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

4.5. Более сложные ошибки

Описанные выше ситуации с ошибками рассматривались в предположении, что ошибку можно определить, исследуя в каждый момент только одну запись. Однако не всякая ошибка столь безобидна. Например, обратимся к структуре данных, показанной на рис. 4.8.

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

Рис. 4.8. Ошибки взаимосвязи.

В этой структуре данных записи организованы в группы по три. Имеются два типа групп. Одна группа содержит записи типов А, В и С в указанном порядке; дру-гоя группа содержит в предписанном порядке записи типов А, В и Б. При обработке этих данных очень важно различать два типа групп, потому что они обрабатываются совсем по-разному. (Предположим, что группы типа 2 представляют группы ошибок. ) Поэтому необходимо знать тип подлежащей обработке группы до того, как начнется обработка.

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

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

(область) первых трех записей. Затем после обработки этих трех записей читаются следующие три и так далее. Этот процесс называется «множественным предварительным чтением». Существует ряд вариантов этого метода, но в основном работа протекает так, как здесь описано. На рис. 4.8 обозначения ИЗ в кружках указывают места, где появились бы множественные чтения.

Пользуется популярностью вариант этого метода с множественным чтением в начале программы и с одиночными чтениями после обработки каждой записи, *как и в обычной ситуации. Однако в этом случае при чтении каждой очередной записи она помещается в последнюю позицию буфера многих записей. Каждый раз непосредственно перед чтением только что обработанная текущая запись удаляется из первой позиции буфера, а все остальные записи в буфере перемещаются на одну позицию вперед, чтобы освободить последнюю позицию, куда по требованию можно будет поместить следующую запись*. Этот вариант иллюстрируется на рис. 4.9.


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