Подключение программ к формату
В формате вывода можно использовать программные функции (написанные пользователем и включенные в библиотеку FORMAT32.DLL) и предназначенные для выполнения таких операций по форматированию, которые не могут быть выполнены с помощью языка форматирования. Такие функции, подключаемые к формату, называются форматные выходы или формат-программы. По сути данные функции выходят за рамки собственно языка форматирования, а сама система просто предоставляет некоторый стандартный интерфейс передачи данных для таких функций.
С точки зрения языка форматирования формат-программы являются строковыми функциями с форматом в качестве аргумента. При этом сначала вычисляется аргумент, а затем он передается функции. Формат-программа возвращает строку символов, с которой система обращается так, как если бы она была полем форматируемого документа.
Обращение к формат-программе в формате производится следующим образом:
&имя(формат),
где:
& | Идентификатор вызова формат-программы; | ||
Имя
| Имя формат-программы; | ||
Формат | Аргумент. |
Система предлагает для использования комплексную формат-программу UNIFOR, реализующую различные специфические функции. Вид реализуемой функции определяется первым символом строки, которая формируется в результате выполнения формата, передаваемого в качестве аргумента формат-программы.
Перечень функций формат-программы UNIFOR и примеры их применения приведены в Таблице 1.
Таблица 1
п/п | Вид функции | Назначение | Формат (передаваемая строка) | Пример | |||||
1 | 0 | Выдать содержимое документа полностью (формат ALLl) | 0 | ….&unifor('0')…. | |||||
2 | 3 | Выдать дату/время в виде ГГММДДЧЧММСС | 3 | …..&unifor('3')…. | |||||
3 | 9 | Удалить двойные кавычки из заданной строки | 9<исх.строка> | ….&unifor("9"v200^a)…. | |||||
4 | А | Выдать заданное повторение поля | AV<tag>^<delim>*
<ofset>.<length># <occur> где: <tag> - метка поля; <delim> - разделитель подполя; <offset> - смещение; <length> - длина; <occur> - номер повторения | …&unifor('Av200#2')……
…&unifor('Av910^a#5')… ….&unifor('Av10^b*2.10#2')…. | |||||
5 | P | Выдать заданное оригинальное повторение поля | то же самое | то же самое | |||||
6 | B | Выдать библиографическую свертку документа | B | …..&unifor('B')….. | |||||
7 | C | Контроль ISSN/ISBN
При положительном результате - 0 При отрицательном - 1 | С<ISSN/ISBN> | ….&unifor("C"v10^a)…. | |||||
8 | E | Вернуть заданное количество первых слов в строке | EN<строка>
где N - кол-во слов (одна цифра) | …..&unifor("E3"v200^a)…. | |||||
9 | F | Вернуть конец строки после заданного кол-ва первых слов | FN<строка>
где N - кол-во слов (одна цифра) | …..&unifor("F3"v200^a)…. | |||||
10 | G | Вернуть часть строки до или начиная с заданного символа | GNA<строка>
где: N=0 если ДО заданного символа (не включая его); N=1 если начиная С заданного символа (включая его); А - заданный символ (# - обозначает цифру; $ - обозначает букву) | ….&unifor("G0#"v700)…
….&unifor("G1-"v700^a)… | |||||
11 | S | Универсальный счетчик | SN
где: N=0 - обнулить счетчик; N=1..9 - увеличить значение счетчика на соотв.значение} N=A - вернуть значение счетчика - арабскими цифрами} N=X - вернуть значение счетчика - римскими цифрами | ….&unifor('S0')…..
….&unifor('S1')…… ….&unifor('SA')…… | |||||
12 | L | Вернуть окончание термина | L<начало_термина> | …..&unifor("L"v101)…. | |||||
13 | U | Куммуляция номеров журналов | U<strbase>,<stradd>
где: <strbase> - исходная куммулированная строка <stradd> - куммулируемые номера | ...&unifor("U"v909^h",12").. | |||||
14 | V | Декуммуляция номеров журналов | V<strbase>
где: <strbase> - исходная строка для декуммуляции | …..&unifor("V"v909^h")….. | |||||
15 | W | Контроль куммуляции | W<strbadd>,<strbase>
где: <strbase> - исходная куммулированная строка <stradd> - куммулируемый номер. Возврат: 0 - если <stradd> не присутствует в <strbase> 1 - если <stradd> присутствует в <strbase> | …&unifor("W12,"v909^h)… | |||||
16 | Z | Размножение экземпляров (функция ничего не возвращает). Можно применять только в глобальной корректировке | Z | …..&unifor('Z')…… | |||||
17 | R | Генерация случайного числа | RNN
где: NN- кол-во знаков в случайном числе (по умолчанию - 6) | …..&unifor('R10')…… | |||||
18 | K | Раскодировка через справочник (меню) | K<имя_меню>\<исх_значение> | ….&unifor("Kjz.mnu\"v101) | |||||
19 | I | Вернуть параметр из INI-файла | I<SECTION>,<PAR_NAME>,<DEFAULT_VALUE> | ….&unifor('IPRIVATE,NAME,NONAME')…. | |||||
20 | 1 | Вернуть заданный подэлемент | 1NCXY?V<tag>^<delim>*<offset>.<length>#<occur>
где: N - номер повторения подэлемента; если указана * - номер подэлемента совпадает со счетчиком повторяющейся группы; ХY - разделители между подэлементами; С - принимает значения: R - разделители справа от каждого подэлемента, кроме последнего; L - разделители слева от каждого подэлемента; D - каждый подэлемент заключен слева разделителем Х и справа - Y; ? - символ-разделитель. Остальные параметры аналогичны параметрам для функции А (см. выше) | ….(/&unifor('1*R; ?v910^h#1')).. | |||||
21 | T | Транслитерирование кириллических символов с помощью латиницы | TN<строка>
где N - вид таблицы транслитерирования (0 или 1) | ….&unifor("T0"V200)….. | |||||
22 | J | Вернуть кол-во ссылок для заданного термина | J<dbn>,<термин>
<dbn> - имя БД; по умолчанию используется текущая. | .&unifor('JBOOK,',"A="v200^a). | |||||
23 | D | Форматирование документа из другой БД (REF на другую БД) | D<dbn>,<@mfn|/termin/>,<@имя_формата|формат>
Передаются три параметра, разделенные запятой: Первый - имя БД; Второй - или непосредственно MFN с предшествующим символом @ или термин, ссылающийся на документ (термин - заключается в ограничительные символы); Третий - или имя формата с предшествующим символом @ или непосредственно формат | ..&unifor('DBOOK,/K=AAA/,v200') | |||||
24 | X | Удаление из заданной строки фрагментов, выделенных угловыми скобками <> | X<строка> | …&unifor("X"v200)…. | |||||
25 | Q | Вернуть заданную строку в нижнем регистре | Q<строка> | ….&unifor("Q"v200)…. | |||||
26 | M | Отсортировать повторения заданного поля (имеется в виду строковая сортировка) - функция ничего не возвращает. Можно применять только в глобальной корректировке. | MX<tag>^<delims>
X - вид сортировки: I - по возрастанию; D - по убыванию. <tag> - метка поля. <delims> - разделители подполей, определяющих ключ сортировки. | …&unifor('MI910^BD')….. |