Произвольный доступ
При произвольном доступе к файлу операторы ввода-вывода используются для доступа к записям в порядке, определенном пользователем. Произвольный доступ может применяться только к файлам с относительной или индексной организацией.
Для файла с относительной организацией программист указывает требуемую запись, помещая ее относительный номер записи в поле данного относительного ключа. При индексной организации программист указывает требуемую запись, помещая значение одного из ключей записи в поле данного основного ключа записи или дополнительного ключа записи.
Динамический доступ
При динамическом доступе программист может переходить от последовательного доступа к произвольному, используя соответствующие формы операторов ввода-вывода. Динамический доступ может использоваться только для файлов с относительной и индексной организацией.
Режим открытия
Режим открытия файла связан с действиями, которые должны быть выполнены для записей файла. Режимы открытия и их назначение следующие:
для ввода — для извлечения записей;
для вывода — для занесения записей в файл;
для дополнения — для добавления записей к существующему файлу;
для ввода-вывода — для извлечения и обновления записей.
Режим открытия определяется оператором OPEN (ОТКРЫТЬ).
Если файл открыт для ввода, возможен доступ к файлу по оператору READ (ЧИТАТЬ). Для файлов с индексной или относительной организацией, для которых указан последовательный или динамический доступ, может быть также использован оператор START (ПОДВЕСТИ).
Если файл открыт для вывода, записи помещаются в файл выполнением операторов GENERATE (ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ) или WRITE (ПИСАТЬ).
Если файл открыт для дополнения, новые записи добавляются в логический конец файла выполнением операторов GENERATE 62(ГЕНЕРИРОВАТЬ), TERMINATE (ЗАКОНЧИТЬ) или WRITE (ПИСАТЬ).
В режиме открытия для ввода-вывода можно обращаться только к файлам массовой памяти. Дополнительные возможности устройств массовой памяти позволяют обновление записей на месте, таким образом, всегда могут быть использованы операторы READ (ЧИТАТЬ) и REWRITE (ОБНОВИТЬ). Файлы массовой памяти могут быть обновлены таким же образом, как и файлы в последовательной запоминающей среде, перезаписыванием файла полностью в другой файл (возможно в другой участок массовой памяти), используя операторы READ (ЧИТАТЬ) и WRITE (ПИСАТЬ). Тем не менее, иногда более эффективно обновлять файлы массовой памяти на месте. При такой методике обработки файла массовой памяти оператор REWRITE (ОБНОВИТЬ) используется для возврата на то же место запоминающей среды только тех записей, которые были изменены. Операторы READ (ЧИТАТЬ) и REWRITE (ОБНОВИТЬ) являются единственными операторами, использование которых допускается во время обновления па месте последовательных файлов. Для индексных и относительных файлов применяются следующие дополнительные функции: оператор START (ПОДВЕСТИ) может быть использован при последовательном или динамическом доступе для изменения последовательности извлечения записей; оператор DELETE (УДАЛИТЬ) может быть использован при любом доступе для логического удаления записи из файла; оператор WRITE (ПИСАТЬ) может быть использован при произвольном или динамическом доступе для вставки новой записи в файл.
Указатель текущего тома
Указатель текущего тома — логическое понятие, используемое в этом документе для облегчения точного определения текущего физического тома последовательного файла. На состояние указателя текущего тома влияют операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), WRITE (ПИСАТЬ) и READ (ЧИТАТЬ)
Индикатор позиции файла
Индикатор позиции файла — логическое понятие, используемое в этом документе для облегчения точного определения следующей записи в данном файле, которая станет доступной в конкретной последовательности операций ввода-вывода. На установку индикатора позиции файла влияют только операторы START (ПОДВЕСТИ), OPEN (ОТКРЫТЬ) ц READ (ЧИТАТЬ). Понятие индикатора позиции файла не имеет смысла для файлов, открытых для вывода или дополнения.
Понятие верстки
При определении выходного отчета может быть использована фраза LINAGE (ВЕРСТКА). Она облегчает определение логиче-ской страницы и размещение на логической странице верхнего г нижнего полей и области концовки. Использование фразы LINAGE (ВЕРСТКА) неявно определяет соответствующий специальны! регистр LINAGE-COUNTER (СЧЕТЧИК-ВЕРСТКИ), которыі действует как указатель строки в теле страницы.
О п е р а ц и и над файлами
Несколько операторов Кобола обрабатывают файлы как единое целое или как набор записей. Это операторы CLOSE (ЗАКРЫТЬ), OPEN (ОТКРЫТЬ), MERGE (СЛИТЬ) и SORT (СОРТИРОВАТЬ).
Сортировка и слияние
L Сортировка
При использовании сортировки бывает необходимо применить некоторую специальную обработку к содержимому сортируемого файла. Специальная обработка может заключаться в добавлении, удалении, создании, изменении, редактировании либо в других модификациях отдельных записей в файле. Применение специальной обработки может понадобиться до или после переупорядочения записей в результате сортировки, или же такая обработка может потребоваться и до, и после сортировки. Средства сортировки в Коболе позволяют пользователю записать эти процедуры и указать, в каком месте, до или после сортировки, они должны выполняться. Кобол-программа может содержать любое количество сортировок и каждая из них может иметь свои процедуры ввода и вывода. Средства сортировки автоматически приводят к выполнению этих процедур в указанном месте.
В процедуре ввода для создания сортируемого файла используется оператор RELEASE (ПЕРЕДАТЬ). Это значит, что по завершении выполнения процедуры ввода те записи, которые обработаны посредством оператора RELEASE (ПЕРЕДАТЬ) (а не оператором WRITE (ПИСАТЬ)), составляют сортируемый файл, доступ к которому возможен только по оператору SORT (СОРТИРОВАТЬ). Выполнение оператора SORT (СОРТИРОВАТЬ) упорядочивает весь набор записей в сортируемом файле соответственно ключам, указанным в операторе SORT (СОРТИРОВАТЬ).
К отсортированным записям сортируемого файла возможен j доступ посредством оператора RETURN (ВЕРНУТЬ) во время вы- : полнения процедуры вывода.
Для сортируемого файла нет процедур обработки меток, которыми мог бы управлять программист, и правила блокирования л и распределения внутренней памяти определяются оператором • SORT (СОРТИРОВАТЬ). Операторы RELEASE (ПЕРЕДАТЬ) и RETURN (ВЕРНУТЬ) ничего не предполагают относительно бу- j ферных полей, блоков или катушек. Следовательно, сортируемый 1 файл можно рассматривать как внутренний файл, созданный (one- • €4рятором RELEASE (ПЕРЕДАТЬ)) из входного файла, обработанной (оператором SORT (СОРТИРОВАТЬ)) и затем доступный (оператором RETURN (ВЕРНУТЬ)) выходному файлу. Обращение и доступ к самому сортируемому файлу возможны только в операторе SORT (СОРТИРОВАТЬ). Описание сортируемого- сливаемого файла можно рассматривать как особый тип описания файла. То есть, сортируемый файл, как и любой файл, является набором записей.
2. Слияние
При использовании слияния бывает необходимо применить специальную обработку содержимого сливаемого файла. Специальная обработка может заключаться в добавлении, удалении, изменении, редактировании либо каких-либо других модификациях отдельных записей в файле. Средства слияния в Коболе позволяют пользователю задать процедуру вывода, которая должна выполняться при создании выходного результата слияния. Сливаемые записи становятся доступными из сливаемого файла при использовании оператора RETURN (ВЕРНУТЬ) в процедуре вывода.
Для сливаемого файла нет процедур обработки меток, которыми мог бы управлять программист, и правила блокирования и распределения внутренней памяти определяются оператором MERGE (СЛИТЬ). Оператор RETURN (ВЕРНУТЬ) ничего не предполагает относительно буферных полей, блоков или катушек.
Сливаемый файл, таким образом, можно рассматривать как внутренний файл, созданный из входных файлов их комбинацией (оператором MERGE (СЛИТЬ)) и доступный затем (по оператору RETURN (ВЕРНУТЬ)) выходному файлу. Обращение и доступ к самому сливаемому файлу возможны только в операторе MERGE (СЛИТЬ). Описание сортируемого-сливаемого файла можно рассматривать как особый тип описания файла. То есть, сливаемый файл, как и любой файл, является набором записей.
О б р а б о т к а особых ситуаций
Во время выполнения любой операции ввода или вывода могут возникнуть особые условия, препятствующие нормальному завершению операции. Имеются три метода сообщения объектной программе об этих условиях: ключи состояния, декларативы ошибок и «обязательные фразы, связанные с повелительным оператором.
Состояние ввода-вывода
Состояние ввода-вывода — это логическое понятие, используемое в этом документе для облегчения точного определения состояния выполнения операции ввода-вывода.
На установку состояния ввода-вывода влияют только операторы CLOSE (ЗАКРЫТЬ), DELETE (УДАЛИТЬ), OPEN (ОТКРЫТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ) и WRITE (ПИСАТЬ).
3 Зак. 254 Є
5Значение состояния ввода-вывода для данного файла доступно' программе только посредством имени-данного, указанного в фразе- FILE STATUS (СОСТОЯНИЕ ФАЙЛА) статьи управления файлом для этого файла. Значение состояния ввода-вывода помещается в это данное во время выполнения оператора ввода-вывода и до выполнения любого повелительного оператора, связанного с этим оператором ввода-вывода, или до выполнения декларативні ошибки.
Декларативы ошибки
Если для файла указана процедура USE AFTER EXCEPTION (ИСПОЛЬЗОВАТЬ ПОСЛЕ ОШИБКИ), процедура выполняется каждый раз, когда возникают условия ввода или вывода, приводящие к неуспешной операции ввода-вывода. Однако декларати- ва ошибки не выполняется, если имеется условие неверного ключа и указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), или при наличии условия конца и указанной фразе AT END (В КОНЦЕ).
Необязательные фразы
Фразы INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА) могут быть указаны в операторах DELETE (УДАЛИТЬ), READ (ЧИТАТЬ), REWRITE (ОБНОВИТЬ), START (ПОДВЕСТИ) или WRITE (ПИСАТЬ). Некоторые из условий, приводящие к условию ошибки ключа, возникают, когда запрашиваемый ключ не существует в файле (операторы DELETE (УДАЛИТЬ), READ (ЧИТАТЬ) или START (ПОДВЕСТИ)); когда ключ уже есть в файле и дублирования не разрешаются (оператор WRITE (ПИСАТЬ)); когда ключа в файле нет или когда ключ не является последним прочитанным ключом (оператор REWRITE (ОБНОВИТЬ)).
Если условие ошибки ключа возникает во время выполнения оператора, для которого указана фраза INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА), выполняется оператор, определяемый этой фразой INVALID KEY (ПРИ ОШИБКЕ КЛЮЧА).
В операторе READ (ЧИТАТЬ) может быть указана фраза АТ' END (В КОНЦЕ). Условие «в конце» возникает:
в файле с последовательным доступом, когда в файле не существует следующей логической записи;
когда число значащих цифр в относительном номере записи больше размера данного — относительного ключа;
когда необязательный файл отсутствует;
при попытке выполнения оператора READ (ЧИТАТЬ) при уже существующем условии «в конце». Если во время выполнения оператора, для которого указана фраза AT END (В КОНЦЕ), возникает условие «в конце», выполняется оператор, определенный фразой AT END (В КОНЦЕ).
ГЕНЕРАТОР ОТЧЕТОВ
Назначением генератора отчетов является организация, форматирование и представление содержания выдаваемых отчетов. Хотя отчет может быть составлен без использования этих средств, генератор отчетов обеспечивает более удобные возможности для построения и составления отчетов. Программирование процедур, которое обычно производит программист, автоматически обеспечивается системой управления генератором отчетов. Таким образом, программист избавлен от написания процедур перемещения данных, конструирования печатаемых строк, подсчета строк на странице, нумерации страниц, составления строк заголовка и строк концовки, распознавания конца логических подразделений данных, обновления счетчиков сумм и т. п. Все эти действия выполняются автоматически на основании спецификаций, главным образом, секции отчетов раздела данных исходной программы.
Секция отчетов
Секция отчетов в разделе данных содержит одну или несколько статей описания отчета RD (ОО), каждая из которых представляет полное описание отчета.
Отчет, имя которого указано в статье описания отчета, не относится прямо к выходному файлу. Вместо этого он связан с именем- файла в секции файлов и это имя-файла связывается с файлом, когда выполняется оператор OPEN (ОТКРЫТЬ), указывающий имя-файла. С одним и тем же именем файла может быть связано несколько отчетов и чтобы отличить отчеты друг от друга, используется фраза CODE (С КОДОМ). Для внешнего определителя файла, соотнесенного имени-файла, отдельно компилируемые программы могут указывать различные отчеты для одного и того же имени-файла. Статья описания файла, к которому относится отчет, не может содержать статей описания записей, описывающих записи данных. Эта статья описания файла должна указывать имя статьи описания отчета для каждого отчета, связанного с этим именем-файла в данной программе.
Статья описания отчета содержит набор фраз, именующих отчет и снабжающих специфической информацией о формате печатаемой страницы и организации подразделений отчета. В статье описания отчета может быть задан код идентификации так, чтобы каждый отчет можно было идентифицировать отдельно в промежуточном выходном файле.