Если все операнды варианта REPLACING (ЗАМЕНЯЯ) сравнивались и совпадение не произошло, самое левое слово библиотечного текста копируется в исходную программу. Следующее последовательное слово библиотечного текста рассматривается как самое левое слово библиотечного текста и снова начинается цикл сравнения с первым псевдотекстом-1, идентификатором-1, словом-1 или литералом-1, указанным в варианте REPLACING (ЗАМЕНЯЯ).
Если происходит совпадение псевдотекста-1, идентификатора-1, слова-1 или литерала-1 с библиотечным текстом, соответ- ствующйй псевдотекст-2, идентификатор-2, слово-2 или литерал-2 помещаются в исходную программу. Слово библиотечного текста, непосредственно следующее за самым правым словом текста, которое участвовало в сравнении, рассматривается теперь как самое левое слово текста. Снова начинается цикл сравнения с первым псевдотекстом-1, идентификатором-1, словом-1 или литералом-1, указанным в варианте REPLACING (ЗАМЕНЯЯ).
Операция сравнения продолжается до тех пор, пока самое правое слово текста в библиотечном тексте или участвовало в успешном сравнении или было рассмотрено в качестве самого левого слова библиотечного текста и участвовало в полном цикле сравнения.
Строки комментариев и пустые строки, появляющиеся в библиотечном тексте и псевдотексте-1, игнорируются при сопоставлении; последовательность слов текста в библиотечном тексте, если это применимо, и в псевдотексте-1 определяются правилами формата представления (см. ч. 4, п. 7.2).
Строки комментариев и пустые строки, появляющиеся в псев- дотексте-2, копируются в результирующую программу без изменений всякий раз, когда псевдотекст-2 помещается в исход- ную программу в результате замены текста. | Строки коммеп- тариев и пустые строки, появляющиеся в библиотечном тексте, копи- зуются в результирующую исходную программу без и з менений со следующим исключением: строка-комментарий или пустая строка в библиотечном тексте не копируется, если строка-комментарий или пустая строка появляется внутри последователь- ности слов текста, которые совпадают с псевдотекстом-1 Г
В
допускаются
библиотечном тексте и псевдотекстеотладочные строки. | Слова текста в отладочной строке участвуют в правилах сравнения, как если бы D (Т) не появлялась в поле индикатора. Отладочная строка указана в псевдотексте, если отладочная строка начинается в исходной программе после открывающего ограничителя псевдотекста, но до соответствую- щего закрывающего ограничителя псевдотекста. -
Синтаксическая правильность библиотечного текста не может быть установлена независимо. Синтаксическая правильность всей исходной программы Кобола, за исключением операторов COPY (КОПИРОВАТЬ) | и REPLACE (ЗАМЕНИТЬ) |, не может быть определена до тех пор, пока не будут полностью обработаны все операторы COPY (КОПИРОВАТЬ) и REPLACE ~ (ЗАМЕНИТЬ) I .
Каждое слово текста, копируемое из библиотеки, [ но не (замененное^ копируется так, что будет начинаться в результирующей программе в той же области строки, в которой оно начинается в строке в библиотеке. I Однако, если слово текста, копируемое из библиотеки, начинается в области А, и за ним следует другое слово текста, которое также начинается в области А этой же строки, и если имеет место замена предшествующего слова текста в строке заменяющим текстом большей длины, следующее слово текста начинается в области В, если оно не может быть начато в области А. Каждое слово текста в псевдотексте-2, котс- рое должно быть помещено в результирующую программу, начинается в результирующей программе в той же области, в которой оно появляется в псевдотексте-2. Каждый идентификатор-2, литерал-2 или слово-2, которое должно быть помещено в результирующую программу, начинается в результирующей программе в той же области, в которой появилось бы самое левое слово библиотечного текста, которое участвовало в сравнении, если бы оно не заменялось.
Библиотечный текст должен соответствовать правилам формата представления Кобола.
Если в исходную программу как результат оператора COPY (КОПИРОВАТЬ) вводятся дополнительные строки, каждое вводимое слово текста появляется в отладочной строке, если оператор COPY (КОПИРОВАТЬ) начинается в отладочной строке или если вводимое слово текста появляется в отладочной строке в библиотечном тексте. I Когда вводится слово текста, определенное фразой BY (НА), оно появляется в отладочной строке, если пер- : вое слово библиотечного текста, которое должно быть заменено, указано в отладочной строке. За исключением предыдущих случаев, только те слова текста, которые указаны в отладочных строках, которые являются отладочными в строках псевдотекста-2, появляются в отладочных строках в результирующей программе. Если какой-нибудь литерал, указанный как литерал-2 или в псевдотексте-2 или библиотечном тексте, является слишком длинным и не может вместиться в одной строке без переноса на другую в результирующей программе и литерал не должен размещаться в отладочной строке, вводятся дополнительные строки продолжения, которые содержат остаток литерала. Если замена требует, чтобы продолжаемый литерал был продолжен в отладочной строке^ в программе имеется ошибка.
Слова текста после замены помещаются в исходную программу для компиляции в соответствии с правилами формам та представления (см. ч. 4, п. 7.). Если в исходную программу копируются слова текста из псевдотекста-2, дополнительные пробелы могут быть введены только между словами текста туда, где уже имеется пробел (включая подразумеваемый пробел между исходными строками).
(И) Если в исходную программу в результате обработки операторов COPY (КОПИРОВАТЬ) вводятся дополнительные строки, поле индикатора вводимой строки содержит такую же литеру, как строка, на которой начинается текст, подлежащий замене, за исключением случая, когда эта строка содержит дефис; в этом-случае вводимая строка содержит пробел.
В случае, когда литерал продолжается на вводимой строке, которая не является отладочной строкой, в поле индикатора помещается дефис.
ОПЕРАТОР REPLACE (ЗАМЕНИТЬ)
Назначение
Оператор REPLACE (ЗАМЕНИТЬ) используется для замены текста исходной программы.
Общий формат
Формат 1
REPLACE (== псевдотекст-1 = =
В Y = = псевдотекст-2 ==}...
ЗАМЕНИТЬ {= = псевдотекст-1 = =
НА= = псевдотекст-2 = =}...
Формат 2
REPLACE OFF
ОТКЛЮЧИТЬ ЗАМЕНИТЬ
Синтаксические правила
Оператор REPLACE (ЗАМЕНИТЬ) может появиться в исходной программе всюду, где может появиться строка-литер. Ему должен предшествовать разделитель точка, кроме случая, когда он является первым оператором отдельно компилируемой программы.
Оператор REPLACE (ЗАМЕНИТЬ) должен заканчиваться разделителем точка.
Псевдотекст-1 должен содержать одно или несколько слов текста.
Псевдотекст-2 может содержать одно или несколько слов текста или не содержать ни одного слова текста.
Строка-литер в псевдотексте-1 и псевдотексте-2- может быть продолжена (см. ч. 4, п. 7.2.5).
Реализация должна допускать слова текста в псевдотексте длиной от 1 до 322 литер.
Псевдотекст-1 не должен состоять только из разделителя запятая или разделителя точка с запятой.
Если слово REPLACE (ЗАМЕНИТЬ) появляется в статье-комментарии или в месте, где может появиться статья-комментарий, оно рассматривается как часть статьи-комментария,
Общие правила
Формат 1 оператора REPLACE (ЗАМЕНИТЬ) определяет текст исходной программы, который должен быть заменен соответствующим текстом. Каждое совпадающее появление псевдотекста-1 в исходной программе заменяется соответствующим псевдотекстом-2.
Формат 2 оператора REPLACE (ЗАМЕНИТЬ) указывает, что все действующие в настоящий момент замены текста отменяются.
Данное появление оператора REPLACE (ЗАМЕНИТЬ) находится в действии от точки, в которой оно указано, до следующего появления оператора или конца отдельно компилируемой программы соответственно.
Все операторы REPLACE (ЗАМЕНИТЬ), находящиеся в исходной программе, обрабатываются после того, как будут обработаны все операторы COPY (КОПИРОВАТЬ), находя щиеся в исходной программе.
Текст, создаваемый в результате обработки оператора REPLACE (ЗАМЕНИТЬ), не должен' содержать оператор REPLACE (ЗАМЕНИТЬ).
Операция сравнения для определения замены текста выполняется следующим образом:
псевдотекст-1 сравнивается с эквивалентным количеством смежных слов текста исходной программы, начиная с самого левого слова текста исходной программы и первого псевдотекста-1;
псевдотекст-1 совпадает с исходным текстом тогда и только тогда, когда упорядоченная последовательность слов текста которая образует псевдотекст-1, равна символ за символом упорядоченной последовательности слов текста исходной программы. При сопоставлении каждое вхождение разделителя запятая, точка с запятой или пробел в псевдотексте-1 или в тексте исходной программы рассматривается как один пробел. Любая последовательность из одного или нескольких разделителей пробел рассматриваются как один пробел;
если совпадение не имеет места, сравнение повторяется для каждого следующего последовательного вхождения псевдотекста-1 до тех пор, пока не будет обнаружено совпадение или не останется ни ‘одного следующего последовательного вхождения псевдотекста-1.
когда все вхождения псевдотекста-1 сравнивались и совпадение не произошло, следующее последовательное слово текста исходной программы рассматривается как самое левое слово текста исходной программы и снова повторяется цикл срав-. нения, начиная с первого вхождения псевдотекста-1;
если происходит совпадение псевдотекста-1 и текста исходной программы, соответствующий псевдотекст-2 заменяет совпавший текст в исходной программе. Слово текста исходной программы, непосредственно следующее за самым правым словом текста, которое участвовало в сравнении, рассматривается теперь как самое левое слово текста исходной программы. Цикл сравнения снова начинается с первого вхождения псевдотекста-1;
операция сравнения продолжается до тех пор, пока самое правое слово текста в тексте исходной программы, которое принадлежит области действия оператора REPLACE (ЗАМЕНИТЬ), или участвовало в успешном сравнении, или было рассмотрено в качестве самого левого слова текста исходной программы и участвовало в полном цикле сравнения.
Строки комментариев и пустые строки, появляющиеся в тексте исходной программы и в псевдотексте-!, при сопоставлении игнорируются; следование слов текста в тексте исходной программы и псевдотекста-1 определяется правилами формата представления (см. ч. 4, п. 7.2).
Строки комментариев и пустые строки в псевдотексте-2 помещаются в результирующую программу без изменения всякий раз, когда псевдотекст-2 помещается в исходную программу в результате замены текста. Строка комментария и пустая строка в тексте исходной программы не заменяется, если эта строка комментария или пустая строка появляется внутри последовательности слов текста, которые совпадают с псевдотекстом-!.
В псевдотексте допускаются отладочные строки. Слова текста в отладочной строке участвуют в правилах сравнения, как если бы D (Т) не появлялось в поле индикатора.
Синтаксическая правильность текста исходной программы, за исключением операторов COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ), не может быть установлена до тех пор, пока не будут полностью обработаны все операторы COPY (КОПИРОВАТЬ) и REPLACE (ЗАМЕНИТЬ).
Слова текста, вводимые в исходную программу в результате обработки оператора REPLACE (ЗАМЕНИТЬ), помещаются в исходную прогр-амму в соответствии с правилами формата представления (см. ч. 4, п. 7). Когда слова текста из псевдотекста-2 вводятся в исходную программу, дополнительные пробелы могут быть введены только между словами текста, где уже имеется пробел (включая подразумеваемый пробел -между исходными строками).
Если в исходную программу в результате обработки операторов REPLACE (ЗАМЕНИТЬ) вводятся дополнительные строки, поле индикатора вводимой строки содержит такую же литеру, как строка, на которой начинается текст, подлежащий замене, за исключением случая, когда эта же строка содержит дефис; в этом случае вводимая строка содержит пробел.
Если какой-нибудь литерал в псевдотексте-2 является слишком длинным и не может вместиться в одной строке без переноса на другую строку в результирующей программе и литерал не должен размещаться в отладочной строке, вводятся дополнительные строки продолжения, которые содержат остаток литерала. Если замена требует, чтобы продолжаемый литерал был продолжен в отладочной строке, в программе имеется ошибка.
Часть 13. МОДУЛЬ ГЕНЕРАТОРА ОТЧЕТОВ
!. ВВЕДЕНИЕ В МОДУЛЬ ГЕНЕРАТОРА ОТЧЕТОВ
Назначение
Модуль генератора отчетов обеспечивает средства составления отчетов посредством определения физического представления отчета, не требуя, по возможности, задания необходимых для этого процедур.
Для определения логической организации отчета использована иерархия уровней. Каждый отчет подразделяется на группы отчета,, которые, в свою очередь, подразделяются . на последовательности данных. Такая иерархическая структура делает возможными явные ссылки на отдельные группы отчета наряду с неявными ссылками на другие уровни иерархии. Группа отчета содержит одно- или несколько данных, которые располагаются на одной или нескольких строках.
Понятия языка
Файл отчетов
Файл отчетов — это выходной файл с последовательной организацией, имеющий статью описания файла, содержащую фразу REPORT (ОТЧЕТ). Содержимое файла отчетов состоит из записей, которые будут записываться в файл под управлением системы управления генератором отчетов (СУГО).