НАЧАЛО >> Оглавление >> Общее описание >> Язык форматирования ИРБИС >> Повторяющиеся группы
Повторяющаяся группа состоит из набора команд форматирования, заключенных в круглые скобки. Смысл этих команд обычный, за исключением того, что обработка повторяющихся полей производится особым образом.
Чтобы понять концепцию повторяющейся группы, надо, прежде всего, знать, каким образом система работает с повторяющимися полями. При отсутствии каких-либо дополнительных указаний система трактует все экземпляры (в том порядке, в котором они находятся в записи) как единую строку текста.
Повторяющаяся группа изменяет порядок обработки системой экземпляров повторяющихся полей таким образом, что происходит последовательная обработка отдельно каждого экземпляра повторяющегося поля.
Когда система обнаруживает скобку, открывающую повторяющуюся группу, происходит следующее:
Отметим еще раз, что все команды форматирования внутри повторяющейся группы обрабатываются последовательно экземпляр за экземпляром (как объяснялось выше), включая, таким образом, и поля, указываемые в команде IF, выражениях и функциях, а также строковых функциях, используемых как команды. Поэтому нежелательно использовать безусловные литералы в повторяющейся группе. И если все же безусловные литералы используются, то они будут выдаваться на один раз больше, чем это надо.
В подавляющем большинстве случаев для правильной обработки повторяющихся полей достаточно использование простых команд форматирования, таких, например, как команда режима вывода или повторяющихся литералов, как это показано ниже:
| Формат | Выходные данные |
|---|---|
| mpl,v70 | Grieve, B.J.Went, F.W. |
| mdl,v70 | Grieve, B.J. Went, F.W. |
| v70+|; | | Grieve, B.J.; Went, F.W. |
Однако, возможны случаи, когда появляется необходимость отформатировать повторяющиеся поля другим способом. Например, иногда необходимо форматировать каждый экземпляр поля с новой строки, чего можно достигнуть только с использованием повторяющейся группы, как это показано ниже:
| Формат | Выходные данные |
|---|---|
| v675/v200^a | 623.746623.746(092) Сухой П.О. Конструктор Сухой. Люди и самолеты |
| (v675/),v200^a | 623.746 623.746(092) Сухой П.О. Конструктор Сухой. Люди и самолеты |
В первом случае команда перехода на новую строку (/) выполняется после форматирования всех экземпляров поля 675, а во втором случае она выполняется после каждого экземпляра поля.
Пример записи ниже иллюстрирует использование повторяющихся полей с подполями (предполагается, что запись содержит два экземпляра поля 20, как это показано в записи ниже). В первом формате использование повторяющейся группы дает возможность вывести различные подполя каждого экземпляра повторяющегося поля в виде таблицы. Второй формат аналогичен первому, но не содержит повторяющейся группы.
Если нужно вывести литерал перед данными, создаваемыми повторяющейся группой, то можно использовать безусловный или условный литерал. Отметим, однако, что условный литерал должен быть связан с командой вывода поля (повторяющаяся группа не является командой вывода поля). Для этой цели необходимо использовать команды фиктивного вывода поля.
Содержимое записи:
# 210: ^aNew York^сMcGraw Hill^d1988
# 210: ^aLondon^cAcademic Press^d1975
Формат 1:
/(v210^a,c11,v210^c,c30,v210^d/)
Вывод:
New York McGraw Hill 1988
London Academic Press 1975
Формат 2:
/v210^a,c11,v210^c,c30,v210^d/
Вывод:
New YorkLondon
McGraw HillAcademic Press
19881975
|
Повторяющиеся группы не могут быть вложенными (т.е. повторяющаяся группа не может содержать другую повторяющуюся группу), за исключением случая, когда внутренняя группа содержится в аргументе формата функции REF. |
Так, например, допустимым является следующий формат:
(v10,ref(val(v20),v10,(v20,v30)))
но приведенный ниже формат является недопустимым, что вызовет сообщение об ошибке:
(v10,(v20,v30))
Использование повторяющейся группы является обязательным в следующих случаях:
Также нужно учитывать возможность употребления повторяющейся группы, когда повторяющееся поле используется в логическом выражении команды IF.