1. Произвольный доступ

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

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

  1. Динамический доступ

При динамическом доступе программист может переходить от последовательного доступа к произвольному, используя соответст­вующие формы операторов ввода-вывода. Динамический доступ может использоваться только для файлов с относительной и индек­сной организацией.

  1. Режим открытия

Режим открытия файла связан с действиями, которые должны быть выполнены для записей файла. Режимы открытия и их назна­чение следующие:

для ввода — для извлечения записей;

для вывода — для занесения записей в файл;

для дополнения — для добавления записей к существующему файлу;

для ввода-вывода — для извлечения и обновления записей.

Режим открытия определяется оператором OPEN (ОТК­РЫТЬ).

Если файл открыт для ввода, возможен доступ к файлу по опе­ратору READ (ЧИТАТЬ). Для файлов с индексной или относитель­ной организацией, для которых указан последовательный или ди­намический доступ, может быть также использован оператор START (ПОДВЕСТИ).

Если файл открыт для вывода, записи помещаются в файл вы­полнением операторов GENERATE (ГЕНЕРИРОВАТЬ), TERMI­NATE (ЗАКОНЧИТЬ) или WRITE (ПИСАТЬ).

Если файл открыт для дополнения, новые записи добавляются в логический конец файла выполнением операторов GENERATE 62(ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ) или WRITE (ПИСАТЬ).

В режиме открытия для ввода-вывода можно обращаться толь­ко к файлам массовой памяти. Дополнительные возможности уст­ройств массовой памяти позволяют обновление записей на месте, таким образом, всегда могут быть использованы операторы READ (ЧИТАТЬ) и REWRITE (ОБНОВИТЬ). Файлы массовой памяти могут быть обновлены таким же образом, как и файлы в последо­вательной запоминающей среде, перезаписыванием файла пол­ностью в другой файл (возможно в другой участок массовой па­мяти), используя операторы READ (ЧИТАТЬ) и WRITE (ПИ­САТЬ). Тем не менее, иногда более эффективно обновлять файлы массовой памяти на месте. При такой методике обработки файла массовой памяти оператор REWRITE (ОБНОВИТЬ) используется для возврата на то же место запоминающей среды только тех за­писей, которые были изменены. Операторы READ (ЧИТАТЬ) и REWRITE (ОБНОВИТЬ) являются единственными операторами, использование которых допускается во время обновления па мес­те последовательных файлов. Для индексных и относительных файлов применяются следующие дополнительные функции: опе­ратор START (ПОДВЕСТИ) может быть использован при после­довательном или динамическом доступе для изменения последова­тельности извлечения записей; оператор DELETE (УДАЛИТЬ) мо­жет быть использован при любом доступе для логического удале­ния записи из файла; оператор WRITE (ПИСАТЬ) может быть использован при произвольном или динамическом доступе для вставки новой записи в файл.

  1. Указатель текущего тома

Указатель текущего тома — логическое понятие, используемое в этом документе для облегчения точного определения текущего физического тома последовательного файла. На состояние указа­теля текущего тома влияют операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), WRITE (ПИСАТЬ) и READ (ЧИТАТЬ)

  1. Индикатор позиции файла

Индикатор позиции файла — логическое понятие, используемое в этом документе для облегчения точного определения следующей записи в данном файле, которая станет доступной в конкретной последовательности операций ввода-вывода. На установку инди­катора позиции файла влияют только операторы START (ПОД­ВЕСТИ), OPEN (ОТКРЫТЬ) ц READ (ЧИТАТЬ). Понятие инди­катора позиции файла не имеет смысла для файлов, открытых для вывода или дополнения.

  1. Понятие верстки

При определении выходного отчета может быть использована фраза LINAGE (ВЕРСТКА). Она облегчает определение логиче-ской страницы и размещение на логической странице верхнего г нижнего полей и области концовки. Использование фразы LINAGE (ВЕРСТКА) неявно определяет соответствующий специальны! регистр LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ), которыі действует как указатель строки в теле страницы.

  1. О п е р а ц и и над файлами

Несколько операторов Кобола обрабатывают файлы как единое целое или как набор записей. Это операторы CLOSE (ЗАК­РЫТЬ), OPEN (ОТКРЫТЬ), MERGE (СЛИТЬ) и SORT (СОР­ТИРОВАТЬ).

  1. Сортировка и слияние

  1. L Сортировка

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

В процедуре ввода для создания сортируемого файла исполь­зуется оператор RELEASE (ПЕРЕДАТЬ). Это значит, что по за­вершении выполнения процедуры ввода те записи, которые обра­ботаны посредством оператора RELEASE (ПЕРЕДАТЬ) (а не оператором WRITE (ПИСАТЬ)), составляют сортируемый файл, доступ к которому возможен только по оператору SORT (СОРТИ­РОВАТЬ). Выполнение оператора SORT (СОРТИРОВАТЬ) упо­рядочивает весь набор записей в сортируемом файле соответствен­но ключам, указанным в операторе SORT (СОРТИРОВАТЬ).

К отсортированным записям сортируемого файла возможен j доступ посредством оператора RETURN (ВЕРНУТЬ) во время вы- : полнения процедуры вывода.

Для сортируемого файла нет процедур обработки меток, ко­торыми мог бы управлять программист, и правила блокирования л и распределения внутренней памяти определяются оператором • SORT (СОРТИРОВАТЬ). Операторы RELEASE (ПЕРЕДАТЬ) и RETURN (ВЕРНУТЬ) ничего не предполагают относительно бу- j ферных полей, блоков или катушек. Следовательно, сортируемый 1 файл можно рассматривать как внутренний файл, созданный (one- • €4рятором RELEASE (ПЕРЕДАТЬ)) из входного файла, обработан­ной (оператором SORT (СОРТИРОВАТЬ)) и затем доступный (оператором RETURN (ВЕРНУТЬ)) выходному файлу. Обраще­ние и доступ к самому сортируемому файлу возможны только в операторе SORT (СОРТИРОВАТЬ). Описание сортируемого- сливаемого файла можно рассматривать как особый тип описания файла. То есть, сортируемый файл, как и любой файл, является набором записей.

  1. 2. Слияние

При использовании слияния бывает необходимо применить спе­циальную обработку содержимого сливаемого файла. Специаль­ная обработка может заключаться в добавлении, удалении, изме­нении, редактировании либо каких-либо других модификациях отдельных записей в файле. Средства слияния в Коболе позволя­ют пользователю задать процедуру вывода, которая должна выпол­няться при создании выходного результата слияния. Сливаемые записи становятся доступными из сливаемого файла при использо­вании оператора RETURN (ВЕРНУТЬ) в процедуре вывода.

Для сливаемого файла нет процедур обработки меток, которы­ми мог бы управлять программист, и правила блокирования и рас­пределения внутренней памяти определяются оператором MERGE (СЛИТЬ). Оператор RETURN (ВЕРНУТЬ) ничего не предпола­гает относительно буферных полей, блоков или катушек.

Сливаемый файл, таким образом, можно рассматривать как внутренний файл, созданный из входных файлов их комбинацией (оператором MERGE (СЛИТЬ)) и доступный затем (по операто­ру RETURN (ВЕРНУТЬ)) выходному файлу. Обращение и доступ к самому сливаемому файлу возможны только в операторе MERGE (СЛИТЬ). Описание сортируемого-сливаемого файла можно рассматривать как особый тип описания файла. То есть, сливаемый файл, как и любой файл, является набором записей.

  1. О б р а б о т к а особых ситуаций

Во время выполнения любой операции ввода или вывода могут возникнуть особые условия, препятствующие нормальному завер­шению операции. Имеются три метода сообщения объектной прог­рамме об этих условиях: ключи состояния, декларативы ошибок и «обязательные фразы, связанные с повелительным оператором.

  1. Состояние ввода-вывода

Состояние ввода-вывода — это логическое понятие, используе­мое в этом документе для облегчения точного определения состоя­ния выполнения операции ввода-вывода.

На установку состояния ввода-вывода влияют только операто­ры CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТК­РЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ) и WRITE (ПИСАТЬ).

3 Зак. 254 Є

5Значение состояния ввода-вывода для данного файла доступно' программе только посредством имени-данного, указанного в фразе- FILE STATUS (СОСТОЯНИЕ ФАЙЛА) статьи управления фай­лом для этого файла. Значение состояния ввода-вывода помеща­ется в это данное во время выполнения оператора ввода-вывода и до выполнения любого повелительного оператора, связанного с этим оператором ввода-вывода, или до выполнения декларативні ошибки.

  1. Декларативы ошибки

Если для файла указана процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ОШИБКИ), процедура выполняет­ся каждый раз, когда возникают условия ввода или вывода, приво­дящие к неуспешной операции ввода-вывода. Однако декларати- ва ошибки не выполняется, если имеется условие неверного ключа и указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), или при наличии условия конца и указанной фразе AT END (В КОН­ЦЕ).

  1. Необязательные фразы

Фразы INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) могут быть указаны в операторах DELETE (УДАЛИТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ) или WRITE (ПИСАТЬ). Некоторые из условий, приводящие к условию ошиб­ки ключа, возникают, когда запрашиваемый ключ не существует в файле (операторы DELETE (УДАЛИТЬ), READ (ЧИТАТЬ) или START (ПОДВЕСТИ)); когда ключ уже есть в файле и дублиро­вания не разрешаются (оператор WRITE (ПИСАТЬ)); когда клю­ча в файле нет или когда ключ не является последним прочитан­ным ключом (оператор REWRITE (ОБНОВИТЬ)).

Если условие ошибки ключа возникает во время выполнения оператора, для которого указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), выполняется оператор, определяемый этой фразой INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА).

В операторе READ (ЧИТАТЬ) может быть указана фраза АТ' END (В КОНЦЕ). Условие «в конце» возникает:

в файле с последовательным доступом, когда в файле не суще­ствует следующей логической записи;

когда число значащих цифр в относительном номере записи больше размера данного — относительного ключа;

когда необязательный файл отсутствует;

при попытке выполнения оператора READ (ЧИТАТЬ) при уже существующем условии «в конце». Если во время выполнения опе­ратора, для которого указана фраза AT END (В КОНЦЕ), возни­кает условие «в конце», выполняется оператор, определенный фра­зой AT END (В КОНЦЕ).

  1. ГЕНЕРАТОР ОТЧЕТОВ

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

  1. Секция отчетов

Секция отчетов в разделе данных содержит одну или несколько статей описания отчета RD (ОО), каждая из которых представля­ет полное описание отчета.

Отчет, имя которого указано в статье описания отчета, не отно­сится прямо к выходному файлу. Вместо этого он связан с именем- файла в секции файлов и это имя-файла связывается с файлом, когда выполняется оператор OPEN (ОТКРЫТЬ), указывающий имя-файла. С одним и тем же именем файла может быть связано несколько отчетов и чтобы отличить отчеты друг от друга, исполь­зуется фраза CODE (С КОДОМ). Для внешнего определителя файла, соотнесенного имени-файла, отдельно компилируемые программы могут указывать различные отчеты для одного и того же имени-файла. Статья описания файла, к которому относится отчет, не может содержать статей описания записей, описывающих записи данных. Эта статья описания файла должна указывать имя статьи описания отчета для каждого отчета, связанного с этим именем-файла в данной программе.

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