Если все операнды варианта REPLACING (ЗАМЕНЯЯ) срав­нивались и совпадение не произошло, самое левое слово библио­течного текста копируется в исходную программу. Следующее последовательное слово библиотечного текста рассматривается как самое левое слово библиотечного текста и снова начинается цикл сравнения с первым псевдотекстом-1, идентификатором-1, словом-1 или литералом-1, указанным в варианте REPLACING (ЗАМЕНЯЯ).

Если происходит совпадение псевдотекста-1, идентификато­ра-1, слова-1 или литерала-1 с библиотечным текстом, соответ- ствующйй псевдотекст-2, идентификатор-2, слово-2 или лите­рал-2 помещаются в исходную программу. Слово библиотечного текста, непосредственно следующее за самым правым словом текста, которое участвовало в сравнении, рассматривается те­перь как самое левое слово текста. Снова начинается цикл срав­нения с первым псевдотекстом-1, идентификатором-1, словом-1 или литералом-1, указанным в варианте REPLACING (ЗАМЕ­НЯЯ).

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

  1. Строки комментариев и пустые строки, появляющиеся в библиотечном тексте и псевдотексте-1, игнорируются при сопос­тавлении; последовательность слов текста в библиотечном тек­сте, если это применимо, и в псевдотексте-1 определяются прави­лами формата представления (см. ч. 4, п. 7.2).

Строки комментариев и пустые строки, появляющиеся в псев- дотексте-2, копируются в результирующую программу без из­менений всякий раз, когда псевдотекст-2 помещается в исход- ную программу в результате замены текста. | Строки коммеп- тариев и пустые строки, появляющиеся в библиотечном тексте, копи- зуются в результирующую исходную программу без и з менений со следующим исключением: строка-комментарий или пустая строка в библиотечном тексте не копируется, если строка-ком­ментарий или пустая строка появляется внутри последователь- ности слов текста, которые совпадают с псевдотекстом-1 Г

  1. В

    допускаются

    библиотечном тексте и псевдотексте

отладочные строки. | Слова текста в отладочной строке участ­вуют в правилах сравнения, как если бы D (Т) не появлялась в поле индикатора. Отладочная строка указана в псевдотексте, если отладочная строка начинается в исходной программе после открывающего ограничителя псевдотекста, но до соответствую- щего закрывающего ограничителя псевдотекста. -

  1. Синтаксическая правильность библиотечного текста не может быть установлена независимо. Синтаксическая правиль­ность всей исходной программы Кобола, за исключением операто­ров COPY (КОПИРОВАТЬ) | и REPLACE (ЗАМЕНИТЬ) |, не может быть определена до тех пор, пока не будут полностью обра­ботаны все операторы COPY (КОПИРОВАТЬ) и REPLACE ~ (ЗАМЕНИТЬ) I .

Каждое слово текста, копируемое из библиотеки, [ но не (замененное^ копируется так, что будет начинаться в результирую­щей программе в той же области строки, в которой оно начинается в строке в библиотеке. I Однако, если слово текста, копируемое из библиотеки, начинается в области А, и за ним следует другое слово текста, которое также начинается в области А этой же строки, и если имеет место замена предшествующего слова тек­ста в строке заменяющим текстом большей длины, следующее слово текста начинается в области В, если оно не может быть начато в области А. Каждое слово текста в псевдотексте-2, котс- рое должно быть помещено в результирующую программу, на­чинается в результирующей программе в той же области, в ко­торой оно появляется в псевдотексте-2. Каждый идентифика­тор-2, литерал-2 или слово-2, которое должно быть помещено в результирующую программу, начинается в результирующей про­грамме в той же области, в которой появилось бы самое левое слово библиотечного текста, которое участвовало в сравнении, если бы оно не заменялось.

Библиотечный текст должен соответствовать правилам форма­та представления Кобола.

Если в исходную программу как результат оператора COPY (КОПИРОВАТЬ) вводятся дополнительные строки, каждое вводи­мое слово текста появляется в отладочной строке, если оператор COPY (КОПИРОВАТЬ) начинается в отладочной строке или если вводимое слово текста появляется в отладочной строке в библио­течном тексте. I Когда вводится слово текста, определенное фразой BY (НА), оно появляется в отладочной строке, если пер- : вое слово библиотечного текста, которое должно быть заменено, указано в отладочной строке. За исключением предыдущих слу­чаев, только те слова текста, которые указаны в отладочных строках, которые являются отладочными в строках псевдотек­ста-2, появляются в отладочных строках в результирующей про­грамме. Если какой-нибудь литерал, указанный как литерал-2 или в псевдотексте-2 или библиотечном тексте, является слиш­ком длинным и не может вместиться в одной строке без перено­са на другую в результирующей программе и литерал не дол­жен размещаться в отладочной строке, вводятся дополнитель­ные строки продолжения, которые содержат остаток литерала. Если замена требует, чтобы продолжаемый литерал был про­должен в отладочной строке^ в программе имеется ошибка.

  1. Слова текста после замены помещаются в исходную программу для компиляции в соответствии с правилами формам та представления (см. ч. 4, п. 7.). Если в исходную программу копируются слова текста из псевдотекста-2, дополнительные про­белы могут быть введены только между словами текста туда, где уже имеется пробел (включая подразумеваемый пробел меж­ду исходными строками).

(И) Если в исходную программу в результате обработки операторов COPY (КОПИРОВАТЬ) вводятся дополнительные строки, поле индикатора вводимой строки содержит такую же литеру, как строка, на которой начинается текст, подлежащий замене, за исключением случая, когда эта строка содержит де­фис; в этом-случае вводимая строка содержит пробел.

В случае, когда литерал продолжается на вводимой строке, которая не является отладочной строкой, в поле индикатора помещается дефис.

  1. ОПЕРАТОР REPLACE (ЗАМЕНИТЬ)

    1. Назначение

Оператор REPLACE (ЗАМЕНИТЬ) используется для заме­ны текста исходной программы.

  1. Общий формат

Формат 1

REPLACE (== псевдотекст-1 = =

В Y = = псевдотекст-2 ==}...

ЗАМЕНИТЬ {= = псевдотекст-1 = =

НА= = псевдотекст-2 = =}...

Формат 2

REPLACE OFF

ОТКЛЮЧИТЬ ЗАМЕНИТЬ

  1. Синтаксические правила

  1. Оператор REPLACE (ЗАМЕНИТЬ) может появиться в исходной программе всюду, где может появиться строка-литер. Ему должен предшествовать разделитель точка, кроме случая, когда он является первым оператором отдельно компилируемой программы.

  2. Оператор REPLACE (ЗАМЕНИТЬ) должен заканчи­ваться разделителем точка.

  3. Псевдотекст-1 должен содержать одно или несколько слов текста.

  4. Псевдотекст-2 может содержать одно или несколько слов текста или не содержать ни одного слова текста.

  5. Строка-литер в псевдотексте-1 и псевдотексте-2- может быть продолжена (см. ч. 4, п. 7.2.5).

  6. Реализация должна допускать слова текста в псевдо­тексте длиной от 1 до 322 литер.

  7. Псевдотекст-1 не должен состоять только из разделителя запятая или разделителя точка с запятой.

  8. Если слово REPLACE (ЗАМЕНИТЬ) появляется в ста­тье-комментарии или в месте, где может появиться статья-ком­ментарий, оно рассматривается как часть статьи-комментария,

  1. Общие правила

Формат 1 оператора REPLACE (ЗАМЕНИТЬ) опреде­ляет текст исходной программы, который должен быть заменен соответствующим текстом. Каждое совпадающее появление псевдотекста-1 в исходной программе заменяется соответствую­щим псевдотекстом-2.

  1. Формат 2 оператора REPLACE (ЗАМЕНИТЬ) указыва­ет, что все действующие в настоящий момент замены текста от­меняются.

  2. Данное появление оператора REPLACE (ЗАМЕНИТЬ) находится в действии от точки, в которой оно указано, до следу­ющего появления оператора или конца отдельно компилируемой программы соответственно.

  3. Все операторы REPLACE (ЗАМЕНИТЬ), находящиеся в исходной программе, обрабатываются после того, как будут обработаны все операторы COPY (КОПИРОВАТЬ), находя щиеся в исходной программе.

  4. Текст, создаваемый в результате обработки оператора REPLACE (ЗАМЕНИТЬ), не должен' содержать оператор REPLACE (ЗАМЕНИТЬ).

  5. Операция сравнения для определения замены текста выполняется следующим образом:

  1. псевдотекст-1 сравнивается с эквивалентным количеством смежных слов текста исходной программы, начиная с самого ле­вого слова текста исходной программы и первого псевдотекста-1;

  2. псевдотекст-1 совпадает с исходным текстом тогда и толь­ко тогда, когда упорядоченная последовательность слов текста которая образует псевдотекст-1, равна символ за символом упо­рядоченной последовательности слов текста исходной програм­мы. При сопоставлении каждое вхождение разделителя запятая, точка с запятой или пробел в псевдотексте-1 или в тексте исход­ной программы рассматривается как один пробел. Любая после­довательность из одного или нескольких разделителей пробел рассматриваются как один пробел;

  3. если совпадение не имеет места, сравнение повторяется для каждого следующего последовательного вхождения псевдо­текста-1 до тех пор, пока не будет обнаружено совпадение или не останется ни ‘одного следующего последовательного вхожде­ния псевдотекста-1.

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

  5. если происходит совпадение псевдотекста-1 и текста ис­ходной программы, соответствующий псевдотекст-2 заменяет совпавший текст в исходной программе. Слово текста исходной программы, непосредственно следующее за самым правым сло­вом текста, которое участвовало в сравнении, рассматривается теперь как самое левое слово текста исходной программы. Цикл сравнения снова начинается с первого вхождения псевдотекста-1;

  6. операция сравнения продолжается до тех пор, пока самое правое слово текста в тексте исходной программы, которое при­надлежит области действия оператора REPLACE (ЗАМЕ­НИТЬ), или участвовало в успешном сравнении, или было рас­смотрено в качестве самого левого слова текста исходной про­граммы и участвовало в полном цикле сравнения.

  1. Строки комментариев и пустые строки, появляющиеся в тексте исходной программы и в псевдотексте-!, при сопоставле­нии игнорируются; следование слов текста в тексте исходной программы и псевдотекста-1 определяется правилами формата представления (см. ч. 4, п. 7.2).

Строки комментариев и пустые строки в псевдотексте-2 по­мещаются в результирующую программу без изменения всякий раз, когда псевдотекст-2 помещается в исходную программу в результате замены текста. Строка комментария и пустая строка в тексте исходной программы не заменяется, если эта строка комментария или пустая строка появляется внутри последова­тельности слов текста, которые совпадают с псевдотекстом-!.

  1. В псевдотексте допускаются отладочные строки. Слова текста в отладочной строке участвуют в правилах сравнения, как если бы D (Т) не появлялось в поле индикатора.

  2. Синтаксическая правильность текста исходной програм­мы, за исключением операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ), не может быть установлена до тех пор, пока не будут полностью обработаны все операторы COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ).

  3. Слова текста, вводимые в исходную программу в ре­зультате обработки оператора REPLACE (ЗАМЕНИТЬ), поме­щаются в исходную прогр-амму в соответствии с правилами фор­мата представления (см. ч. 4, п. 7). Когда слова текста из псев­дотекста-2 вводятся в исходную программу, дополнительные пробелы могут быть введены только между словами текста, где уже имеется пробел (включая подразумеваемый пробел -между исходными строками).

  4. Если в исходную программу в результате обработки операторов REPLACE (ЗАМЕНИТЬ) вводятся дополнительные строки, поле индикатора вводимой строки содержит такую же литеру, как строка, на которой начинается текст, подлежащий замене, за исключением случая, когда эта же строка содержит дефис; в этом случае вводимая строка содержит пробел.

Если какой-нибудь литерал в псевдотексте-2 является слиш­ком длинным и не может вместиться в одной строке без перено­са на другую строку в результирующей программе и литерал не должен размещаться в отладочной строке, вводятся дополни­тельные строки продолжения, которые содержат остаток лите­рала. Если замена требует, чтобы продолжаемый литерал был продолжен в отладочной строке, в программе имеется ошибка.

Часть 13. МОДУЛЬ ГЕНЕРАТОРА ОТЧЕТОВ

!. ВВЕДЕНИЕ В МОДУЛЬ ГЕНЕРАТОРА ОТЧЕТОВ

  1. Назначение

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

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

  1. Понятия языка

    1. Файл отчетов

Файл отчетов — это выходной файл с последовательной органи­зацией, имеющий статью описания файла, содержащую фразу REPORT (ОТЧЕТ). Содержимое файла отчетов состоит из запи­сей, которые будут записываться в файл под управлением системы управления генератором отчетов (СУГО).