Язык форматирования системы ИРБИС

Материал из Wikipedia
Перейти к: навигация, поиск

Язык форматирования ИРБИС (язык манипулирования данными) представляет собой средство, с помощью которого осуществляется разнообразное представление данных для многих операций и режимов системы, в частности, для показа и печати документов, для создания словарей, для импорта/экспорта данных, для формально-логического контроля и т.д.

Общие сведения

История появления

Язык форматирования системы ИРБИС базируется на языке форматирования системы CDS/ISIS (ЮНЕСКО).

Понятие формата

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

Формат как отдельная структура сохраняется в текстовом файле с расширением .pft. Такой файл обычно называют файл формата.

Начало знакомства с языком форматирования ИРБИС

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

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

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

Все команды форматирования могут вводиться прописными или строчными буквами или их комбинацией. В форматах могут присутствовать комментарии. Признаком начала комментария является комбинация символов /*. В качестве комментария принимается часть строки от признака начала комментария до конца строки.

Запись в базе данных, используемая в примерах

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

MFN: 34
600: ^AСухой П.О.^Bо нем
215: ^a383^cил.24л
920: PAZK
999: 0000000
907: ^A19941123^bdsm
964: 78.09.19
10:  ^a5-203-01472-8^dЦ.договор.
101: rus
102: RU
900: ^b05^c22
210: ^cВоенное изд-во^aМ.^d1993
700: ^aКузьмина^bЛ.М.
675: 623.746
675: 623.746(092) Сухой П.О.
908: К89
903: 623.746/К89-239165
910: ^A0^BЭ93-18430^C19930830^Dхр
910: ^A2^Dхр
200: ^aКонструктор Сухой. Люди и самолеты

Команды вывода полей

Команды вывода полей – это команды, используемые для извлечения из записи и вывода конкретного поля или подполя. Имеется специальная команда для извлечения и вывода номера записи MFN, хотя, строго говоря, MFN не является полем (MFN не имеет метки).

Команда вывода поля

Для указания на необходимость вывода поля из записи необходимо записать букву V, за которой должна следовать метка поля. Это может быть прописная или строчная буква. Ниже приведены примеры применения данной команды.

Формат Выходные данные
v210 ^cВоенное изд-во^aМ.^d1993
v200 aКонструктор Сухой. Люди и самолеты
v700 ^aКузьмина^bЛ.М.
v600 ^AСухой П.О.^Bо нем

Команда вывода подполя

Для вывода конкретного подполя из данного поля следует добавить соответствующий разделитель подполей к метке поля. Заметим, что можно использовать специальный разделитель подполей ^* для вывода первого подполя, если оно есть. В этом случае, первому подполю необязательно должен предшествовать его разделитель. Разделитель подполей может быть прописной или строчной буквой (обязательно латинской).

Формат Выходные данные
v210^с Военное изд-во
v200^a Конструктор Сухой. Люди и самолеты
v700^a Кузьмина
v600^* Сухой П.О.

Вывод фрагмента поля или подполя

В некоторых случаях может возникнуть необходимость вывести часть поля, которая не является подполем, особенно тогда, когда поле имеет фиксированный формат (например, запись даты в виде ГГГГММДД). Это можно сделать командой смещение/длина, размещаемой сразу за командой вывода поля или подполя, к которому команда применяется.

Эта команда имеет вид:

*<смещение>.<длина>

где:

  • *<смещение> указывает позицию первого символа фрагмента, который должен быть извлечен из поля или подполя (позиции символов нумеруются с нуля, т.е. первый символ находится в позиции 0, второй - в позиции 1 и т.д.); если смещение не указано, то оно считается равным 0;
  • .<длина> указывает количество извлекаемых символов. Если длина опущена, то извлекается все поле (подполе) до конца, начиная с символа, указанного в смещении.

Ниже приведены примеры использования команды по отношению к записи, которая в качестве поля с меткой 1 содержит значение 88-Nov-05.

Формат Выходные данные
v1*3.3 Nov
v1.2 88
v1*7 05
v1*7,v1*2.4 05-Nov
v1*7,v1*2.5,v1.2 05-Nov-88
v210.3 ^cВ
v210^c.3 Вое

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

Команда вывода MFN

Для вывода номера записи в файле документов служит команда MFN, формат которой:

MFN

или

MFN(d)

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

Формат Выходные данные
MFN 000034
MFN(3) 034
MFN(2) 34
MFN(1) 3

Заметим, что для подавления в MFN впереди стоящих нулей можно использовать функцию F.

Команды режима вывода

Система может выводить данные в трех различных режимах: режим проверки, режим заголовка, режим данных.

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

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

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

Когда система форматирует поле, содержащее подполе, в режимах заголовка или данных, она автоматически заменяет имеющиеся разделители подполей знаками пунктуации (при этом разделитель первого подполя, если он имеется, всегда игнорируется). Специальная комбинация символов "><" заме-няется на "; " (а отдельные символы “<” и “>” подавляются), обеспечивая простой способ форматирования полей, содержащих перечень ключевых фраз, заключенных в угловые скобки. Таблица стандартного замещения разделителей подполей выглядит так:

  • ^a замещается на "; "
  • от ^b до ^i замещается на ", "
  • все другие замещаются на ". "

Команды режима вывода представляются в виде Mmc, где:

  • М – признак команды режима вывода.
  • m следующим образом определяет режим вывода:
    • Р режим проверки;
    • H режим заголовка;
    • D режим данных.
  • с – определяет необходимость преобразования букв в прописные:
    • U буквы преобразуются в прописные;
    • L буквы преобразованию не подвергаются.

Команда режима вывода может появляться в формате столько раз, сколько это нужно и действует до следующей команды режима вывода. По умолчанию система использует команду MPL. Ниже приведены примеры использования команды.

Формат Выходные данные
mpl,v200 ^aКонструктор Сухой. Люди и самолеты
mhl,v200 Конструктор Сухой. Люди и самолеты
mdl,v200 Конструктор Сухой. Люди и самолеты.
mdu,v200 КОНСТРУКТОР СУХОЙ. ЛЮДИ И САМОЛЕТЫ.
mpl,v210 ^cВоенное изд-во^aМ.^d1993
mdl,v210 Военное изд-во; М., 1993.

Команды горизонтального и вертикального размещения

В языке форматирования имеются следующие команды для управления горизонтальным и вертикальным размещением данных:

  • Xn – вставляет n пробелов;
  • Cn – табуляция в позицию n;
  • / – переход на новую строку, если предыдущая строка не была пустой;
  • # – безусловный переход на новую строку;
  • % – удаляет пустые строки (если они есть).

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

Команда # выполняет те же действия, что и /, но переход на новую строку является безусловным.

Можно использовать комбинацию /# для создания одной (и только одной) пустой строки. Комбинация ## может привести к созданию одной или двух пустых строк в зависимости от того, была ли пустой текущая строка перед выполнением первой команды #.

Использование команды # может вызвать затруднение в тех случаях, когда выбираемое поле оказывается пустым. Эта ситуация хорошо иллюстрируется на следующем примере:

/#V10/#V20/#V30

Если все поля присутствуют в документе, то в результате поля 10, 20, и 30 будут располагаться с начала строк и каждому будет предшествовать одна пустая строка. Однако, если поле 20 в документе отсутствует, то между 10 и 30 полями будут вставлены две пустые строки. Это может оказаться нежелательным, если действительно требуется, чтобы между полями была пропущена именно одна пустая строка, независимо от наличия или отсутствия некоторых полей. Таким образом, приведенный выше формат не приведет к желаемому результату.

Эту проблему решает команда %. Ее действие заключается в подавлении всех последовательно расположенных пустых строк, если они имеются, между текущей строкой и последней непустой строкой. Таким образом, формат

%##V10%##V20%##V30 ...

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

Команду Сn имеет смысл применять только в случае использования моноширинных шрифтов. Команды / # % не применимы в случае использования в форматах показа средств RTF или HTML. Команды Сn и Xn не работают в HTML-форматах.

Литералы

Литерал – это строка символов, заключенная в соответствующие ограничители, которая вносится в выводимый текст в таком виде, как она приведена в формате. Литералы могут использоваться, например, для именования полей.

Существуют литералы трех типов:

  • Условный литерал определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля/подполя. Если поле является повторяющимся, то текст будет выведен только один раз, независимо от количества экземпляров поля/подполя. Условные литералы заключаются в двойные кавычки, например:
"Заглавие: "
  • Повторяющийся литерал определяет текст, который будет выведен только в случае присутствия в записи соответствующего ему поля или подполя. Однако, если поле повторяющееся, литерал будет выводиться для каждого экземпляра поля/подполя. Ограничителем для повторяющихся литералов служит символ вертикальной черты:
|Автор: |
  • Безусловный литерал определяет текст, который будет выведен независимо от наличия поля в записи. Безусловные литералы заключаются в одинарные кавычки или знаки апострофа, например:
'Краткое содержание'

или

`Заголовок`

Литерал не должен содержать ограничителей литерала. Например, безусловный литерал не может содержать одинарную кавычку (хотя может содержать двойные кавычки и/или вертикальные черты).

Условные и/или повторяющиеся литералы связываются с полем или подполем своим расположением в формате. Литералы, предшествующие команде вывода поля/подполя, называемые префикс-литералами, выводятся перед содержимым поля/подполя, в то время, как литералы, следующие за командой вывода поля/подполя, называемые суффикс-литералами, выводятся после содержимого поля/подполя.

Если за повторяющимся префикс-литералом непосредственно следует знак + (например, |xxx|+), то он будет выведен перед каждым, кроме первого, экземпляром поля/подполя.

Если повторяющемуся суффикс-литералу непосредственно предшествует знак + (например, +|xxx|), то он будет выведен после каждого, кроме последнего, экземпляра поля/подполя.

С полем/подполем может быть связан более чем один литерал. В этом случае различные литералы должны подчиняться следующим правилам и порядку:

  • префикс-литералы:
    • Один или более условных префикс-литералов. За условным префикс-литералом могут следовать другие условные префикс-литералы, команды вертикального и горизонтального размещения, и/или команды режима вывода. Все команды между первым условным префикс-литералом и соответствующей ему командой вывода поля/подполя становятся условными и будут выполнены только при наличии поля/подполя, иначе они игнорируются.
    • Один и только один повторяющийся префикс-литерал. Если такой литерал есть, то он должен непосредственно предшествовать соответствующей ему команде вывода поля/подполя.
  • суффикс-литералы:
    • Один и только один повторяющийся суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за соответствующей ему командой вывода поля/подполя.
    • Один и только один условный суффикс-литерал. Если такой литерал есть, то он должен следовать непосредственно за повторяющимся суффикс-литералом или связанной с ним командой вывода поля/подполя.
    • Суффикс-литералы не должны разделяться запятыми и не должно быть запятой между командами вывода поля/подполя и первым суффикс-литералом, так как запятая обозначает конец суффикс-литералов, связанных с данной командой вывода поля/подполя.

Пустые литералы – литералы нулевой длины, такие, как "" или || вполне допустимы и могут использоваться, как префикс-литералы для обеспечения условного вертикального размещения или как суффикс-литералы для временного подавления автоматической пунктуации, которая обеспечивается в режиме данных.

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

Примеры различных типов литералов:

Формат Выходные данные
'MFN:      ',mfn(3) MFN:      034
mdl,"Заглавие: "v200 Заглавие: Конструктор Сухой. Люди и самолеты.
v675 623.746623.746(092) Сухой П.О.
v675|; | 623.746; 623.746(092) Сухой П.О.;
v675+|; | 623.746; 623.746(092) Сухой П.О.
; |v675 ; 623.746; 623.746(092) Сухой П.О.
; |+v675 623.746; 623.746(092) Сухой П.О.
"УДК"/v675+|; | УДК
623.746; 623.746(092) Сухой П.О.
(|v675|)| (623.746)(623.746(092) Сухой П.О.)
"(УДК: ",v675+|; |")" (УДК: 623.746; 623.746(092) Сухой П.О.)
mdl,v210 Военное изд-во; М., 1993.
mdl,v210"" Военное изд-во; М., 1993

Команды фиктивного вывода поля

Команды фиктивного вывода поля реализует условный вывод литералов в зависимости от наличия или отсутствия данного поля или подполя без вывода содержимого самого поля. Задаются они следующим образом: Dt или Dt^x или Nt или Nt^x, где:

  • D указывает, что все соответствующие ей условные литералы должны выводиться только при наличии поля,
  • N указывает, что они должны выводиться только при отсутствии поля;
  • t метка поля, управляющего выводом литералов;
  • ^x необязательный код разделителя подполя. Если он приведен, то это означает, что вывод литералов зависит от наличия или отсутствия определенного подполя (отметим, что отсутствие поля говорит и об отсутствии подполей в этом поле).

Обычно команде фиктивного вывода поля предшествует, по крайней мере, один условный префикс-литерал (который может быть пустым), за которым могут следовать один или более других условных префикс-литералов, команды вертикального и горизонтального размещения и/или команды режима вывода. Команда фиктивного вывода поля не может иметь суффикс-литералов.

Несколько примеров использования этих команд:

Формат Выходные данные
"(Отсут.)"n700,v700 Конструктор Сухой. Люди и самолеты
"(Отсут.)"n80,v80+|; | (Отсут.)
"[нет даты]"n907^А,V907^A 19941123
"[нет сведений]"n911,v911 [нет сведений]

Выражения

Язык форматирования позволяет вычислять значения и/или сравнивать значения с помощью выражений. Выражения построены таким образом, что при их вычислении возвращается значение. Таким значением может быть строка символов (например, содержимое поля или литерал), тогда выражение называется строковым, либо число, тогда выражение называется числовым, либо логическое значение (истина или ложь), тогда выражение называется логическим. В системе также имеется набор функций, которые, на основе задаваемых аргументов, выполняют некоторые специфические действия и возвращают значения. Функции, возвращающие в качестве значения число, называются числовыми функциями, возвращающие строку символов - строковыми функциями, а возвращающие логическое значение - логическими функциями. Только строковые функции могут использоваться непосредственно в качестве команд форматирования. Числовые выражения могут использоваться либо в логических выражениях, либо в качестве аргументов функций. Логические выражения и логические функции могут использоваться только в контексте команды IF.

Числовые выражения

Числовое выражение формируется из операндов, которые имеют числовое значение, и операторов, определяющих вид вычислений.

В качестве операндов в числовых выражениях могут выступать: числовые константы, числовые функции, команда вывода номера записи MFN, числовые выражения.

Числовые константы могут быть представлены в виде целых чисел, чисел с десятичной точкой, например 5, 18, 98.65, или чисел в экспоненциальной форме, например, 1.5Е5, обозначающее 1.5 умноженное на 10 в 5-ой степени, т.е. 150000. Числа могут быть со знаком или без.

Числовые функции описаны в отдельной главе. Пример числовой функции val(v10).

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

(val(v20)-5)

Допустимыми операторами в числовых выражениях являются:

  • + – оператор сложения;
  • - – оператор вычитания;
  • * – оператор умножения;
  • / – оператор деления.

Как и в обычной алгебре, при отсутствии скобок одноместные операции выполняются первыми, а умножение и деление выполняются до сложения и вычитания. Два и более операторов одного уровня выполняются слева направо. Можно использовать скобки для изменения порядка вычисления: выражения, заключенные в скобки, вычисляются первыми, а выражения с большей глубиной вложенности вычисляются перед выражениями с меньшей глубиной вложенности скобок.

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

Аналогичным образом, числовое выражение не может быть непосредственно выведено на экран или печать, а должно быть предварительно преобразовано в строку символов с помощью функции F.

Ниже приведены примеры числовых выражений. В примерах предполагается, что MFN=10, v1^a=10, v1^b=20 и v2=30.

Выражение Значение
0.155е+3 155
1е-3 0.001
2*3+9 15
2*(3+9) 24
10-(4*(2-1)) 6
15*0.001 0.015
mfn+100 110
val(v2)+val(v1^a)*7.5 105
(val(v1^a)-val(v1^b))/100 -0.1

Строковые выражения

Строковые выражения формируются из операндов, которые являются строками символов. Поскольку в системе нет явно задаваемых строковых операторов, строковое выражение всегда состоит из одного операнда, которым может быть:

Логические выражения

Логические выражения формируется из операндов, которые могут принимать одно из двух значений, истина или ложь, и логических операторов NOT, AND, OR. Логические выражения используются для вычисления истинности одного или более условий.

Операндами логического выражения могут быть:

  • Выражения отношений – сравнивают два значения и определяют, удовлетворяют ли они отношению, например mfn<10.
  • Логические функции, например p(v24).

Выражение отношения позволяет определять, находятся ли указанные два значения в соответствующем соотношении, или нет. Общий вид выражения отношения следующий:

выражение-1  оператор-отношения  выражение-2

где:

  • выражение-1 и выражение-2 – числовое или строковое выражение, оба выражения должны быть одного типа;
  • оператор-отношения может быть одним из следующих:
    • = равно;
    • <> не равно;
    • < меньше;
    • <= меньше или равно;
    • > больше;
    • >= больше или равно;
    • : содержит (используется только для строковых выражений).

Операторы отношений =, <>, <, <=, >, >= имеют обычное значение при их применении к числовым выражениям. При сравнении строковых выражений применяются следующие правила:

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

Оператор : (содержит) проверяет наличие вхождения строки символов, определенной выражением-2, в другую строку, определенную выражением-1. При наличии такого вхождения выражение принимает значение истина. Этот оператор является нечувствительным к прописным и строчным буквам, для него соответствующие прописные и строчные буквы одинаковы. Например, результатом выражения

v10 : 'химия'

будет истина, если поле 10 содержит в качестве своей подстроки строку химия, в противном случае результатом будет ложь. Отметим, что вторым операндом может быть произвольная строка символов, которая не обязательно совпадает со словом. Так, в приведенном выше примере, результат будет истина не только, когда поле 10 содержит слово химия, но и когда поле содержит такие слова, как биохимия, фотохимия и др.

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

  • Оператор NOT дает значение истина, когда операнд имеет значение ложь, и значение ложь, когда операнд – истина. Оператор NOT может использоваться только как унарный, то есть он всегда применяется к логическому выражению, следующему за ним.
  • Оператор AND дает значение истина, когда оба операнда истинны. Если хотя бы один из операндов имеет значение ложь, то результатом является ложь.
  • Оператор OR дает значение истина, когда один или оба операнда истинны, в противном случае результатом является ложь.

При отсутствии скобок в логических выражениях сначала выполняются операции NOT, затем операции AND, и последними операции OR. Последовательность из двух или более операторов одного уровня обрабатывается слева направо. Можно использовать скобки для изменения порядка вычисления. Выражения, заключенные в скобки, вычисляются первыми, а выражения с большей глубиной вложенности вычисляются перед выражениями с меньшей глубиной вложенности скобок.

Примеры логических выражений:

Выражение Значение
mfn=34 Истина
not mfn=34 Ложь
not (not mfn=34) Истина
v20 = 'люди' Ложь
v200 : 'люди' Истина
v200 : 'ЛЮДИ' Истина
v210^c.6 = 'Военное' Ложь
v210^c.7 = 'Военное' Истина
(v200 : 'люди') AND (v210^c.7= 'Военное') Истина

Функции

Функция вычисляет значение (называемое значением функции или возвращаемым значением), которое затем подставляется вместо функции при вычислении выражения.

Функции могут иметь один или более аргументов, которые необходимо задать для вычисления функции. Аргументы заключаются в скобки и разделяются запятыми.

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

Аргументом функции может быть произвольный формат, который может содержать любую разрешенную команду за исключением функции REF, в которой формат так же используется в качестве аргумента. Функции передается не сам формат, а текст, полученный в результате вычисления формата.

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

В качестве аргумента могут быть команды вывода поля или подполя. Не допускается использовать в команде спецификацию смещение/длина.

Ниже описываются допустимые функции и соответствующие им аргументы. Функции классифицированы в соответствии с типом возвращаемого значения.

Числовые функции

Функция VAL(формат)

Функция VAL возвращает числовое значение своего аргумента. Аргумент – это произвольный формат. Сначала вычисляется аргумент, чтобы получить строку текста. Затем эта строка просматривается слева направо до тех пор, пока не будет найдено числовое значение, представленное в текстовом виде. Допустима форма представления числовых значений в экспоненциальной форме. Функция VAL возвращает это числовое значение, переведенное во внутреннее машинное представление, удобное для выполнения вычислений.

Если не найдено ни одно числовое значение, то функция возвращает значение ноль. Если текст содержит более, чем одно числовое значение, возвращается только первое.

Примеры использования функции VAL (предполагается, что v1^a=10, v1^b=20 и v2=30):

Формат Значение
val('15.79') 15.79
val(v1) 10
val(v1^a) 10
val(v2) 30
val("19"v1^b) 1920
val('xxxx7yyy8zzzz') 7
val('abs.5.8е-4 ml') 0.00058
val('вода') 0
val('Июль-Август 1985') 0

Функция RSUM(формат)

Функция RSUM возвращает сумму одного или более числовых значений. Сначала система вычисляет аргумент, представленный форматом, чтобы получить строку текста. Затем эта строка просматривается слева направо, как и в функции VAL, и все содержащиеся в ней числовые значения складываются. Полученная сумма является значением функции. Отдельные числовые значения должны быть разделены, по крайней мере, одним нечисловым символом, поэтому надо предусмотреть, чтобы такое разделение в формате присутствовало. Функция RSUM может использоваться для вычисления суммы всех числовых значений, содержащихся во всех экземплярах данного повторяющегося поля. Например, предполагая, что поле 1 имеет четыре экземпляра, содержащие числа 1, 2, 3 и 4, будем иметь:

Формат Значение
rsum ('10,20,30') 60
rsum (v1|;|) 10
rsum (v1|,|,'48,3.5') 61.5


Функция RMIN(формат)

Функция RMIN возвращает минимальное значение одного или нескольких числовых значений. Сначала система вычисляет аргумент, представленный форматом, чтобы получить строку текста. Затем эта строка просматривается слева направо, как и в функции VAL, и из нее извлекаются все числа. Алгебраически наименьшее из извлеченных чисел и будет результатом функции. Отдельные числовые значения должны быть разделены, по крайней мере, одним нечисловым символом, поэтому надо предусмотреть, чтобы такое разделение в формате присутствовало. Функция RMIN может использоваться для вычисления минимального значения среди всех числовых значений, содержащихся во всех экземплярах данного повторяющегося поля. Например, предполагая, что поле 1 имеет четыре экземпляра, содержащие числа 10, 20, 30 и 40, будем иметь:

Формат Значение
rmin ('1,2,-3') -3
rmin (v1|;|) 10
rmin (v1|,|,'48,3.5') 3.5


Функция RMAX(формат)

Функция RMAX возвращает максимальное значение одного или нескольких числовых значений. Сначала система вычисляет аргумент, представленный форматом, чтобы получить строку текста. Затем эта строка просматривается слева направо, как и в функции VAL, и из нее извлекаются все числа. Алгебраически наибольшее из извлеченных чисел и будет результатом функции. Отдельные числовые значения должны быть разделены, по крайней мере, одним нечисловым символом, поэтому надо предусмотреть, чтобы такое разделение в формате присутствовало. Функция RMAX может использоваться для вычисления максимального значения среди всех числовых значений, содержащихся во всех экземплярах данного повторяющегося поля. Например, предполагая, что поле 1 имеет четыре экземпляра, содержащие числа 10, 20, 30 и 40, будем иметь:

Формат Значение
rmax ('1, 2, -3') 2
rmax (v1|;|) 40
rmax (v1|,|,'48,3.5') 48


Функция RAVR(формат)

Функция RAVR возвращает среднее арифметическое значение одного или нескольких числовых значений. Сначала система вычисляет аргумент, представленный форматом, чтобы получить строку текста. Затем эта строка просматривается слева направо, как и в функции VAL, и из нее извлекаются все числа. Вычисленное среднее значение извлеченных чисел и будет результатом функции. Отдельные числовые значения должны быть разделены, по крайней мере, одним нечисловым символом, поэтому необходимо предусмотреть, чтобы такое разделение в формате присутствовало. Функция RAVR может использоваться для вычисления среднего значения среди всех числовых значений, содержащихся во всех экземплярах данного повторяющегося поля. Например, предполагая, что поле 1 имеет четыре экземпляра, содержащие числа 10, 20, 30 и 40, будем иметь:

Формат Значение
ravr ('1, 2, -3') 0
ravr (v1|;|) 25
ravr (v1|,|,'48,3.5') 25.25


Функция L(формат)

Функция L использует текст, полученный в результате вычисления аргумента, в качестве термина доступа для инвертированного файла и возвращает MFN первой ссылки на этот термин, если она есть. Перед поиском в инвертированном файле термин автоматически переводится в прописные буквы. Если термин не найден, то функция принимает значение ноль. Функция L обычно используется вместе с функцией REF (примеры использования функции L можно найти в п. 8.2.2). Обратим внимание, что формат, расположенный в аргументе, вычисляется с использованием текущего режима вывода (см. п.3). Это является существенным, так как использование неправильного режима может привести к тому, что термин не будет найден в инвертированном файле. Как правило, следует использовать тот же режим, который применяется в ТВП для инвертированного файла.


Подключение программ к формату (форматные выходы)

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

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

Обращение к формат-программе в формате производится следующим образом:

&имя(формат)

где:

  • & – идентификатор вызова формат-программы;
  • имя – имя формат-программы;
  • формат – аргумент.

Система предлагает для использования комплексную формат-программу UNIFOR, реализующую различные специфические функции.