Система автоматизации библиотек ИРБИС


Повторяющиеся группы


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

Чтобы понять концепцию повторяющейся группы, надо, прежде всего, знать, каким образом система работает с повторяющимися полями. При отсутствии каких-либо дополнительных указаний система трактует все экземпляры (в том порядке, в котором они находятся в записи) как единую строку текста.

Повторяющаяся группа изменяет порядок обработки системой экземпляров повторяющихся полей таким образом, что происходит последовательная обработка отдельно каждого экземпляра повторяющегося поля.

Когда система обнаруживает скобку, открывающую повторяющуюся группу, происходит следующее:

1.   Счетчик экземпляров устанавливается в единицу.

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

3.   Если в процессе текущего просмотра всей повторяющейся группы ничего не выводится (то есть в пределах группы больше не оказалось экземпляров повторяющегося поля), то процесс обработки повторяющейся группы завершается. В противном случае значение счетчика экземпляров увеличивается на 1 и повторяется выполнение шагов 2 и 3.

Отметим еще раз, что все команды форматирования внутри повторяющейся группы обрабатываются последовательно экземпляр за экземпляром (как объяснялось выше), включая, таким образом, и поля, указываемые в команде 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, а во втором случае она выполняется после каждого экземпляра поля.

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

Если нужно вывести литерал перед данными, создаваемыми повторяющейся группой, то можно использовать безусловный или условный литерал. Отметим, однако, что условный литерал должен быть связан с командой вывода поля (повторяющаяся группа не является командой вывода поля). Для этой цели необходимо использовать команды фиктивного вывода поля.

Содержимое записи:

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

Рис. 14

Повторяющиеся группы не могут быть вложенными (т.е. повторяющаяся группа не может содержать другую повторяющуюся группу), за исключением случая, когда внутренняя группа содержится в аргументе формата функции REF. Так, например, допустимым является следующий формат:

(v10,ref(val(v20),v10,(v20,v30)))

но приведенный ниже формат является недопустимым, что вызовет сообщение об ошибке:

(v10,(v20,v30))

Использование повторяющейся группы является обязательным в следующих случаях:

1.   Использование повторяющегося поля в качестве аргумента функции L.

2.   Первый аргумент функции REF ссылается на повторяющееся поле.

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


Содержание раздела