Функции языка форматирования ИРБИС — различия между версиями

Материал из Wikipedia
Перейти к: навигация, поиск
(Ссылки)
 
(не показано 7 промежуточных версий этого же участника)
Строка 1: Строка 1:
'''''Функция''''' вычисляет ''значение'' (называемое '''''значением функции''''' или '''''возвращаемым значением'''''), которое затем подставляется вместо функции при вычислении выражения.
+
Ниже описываются функции, используемые в [[Язык форматирования системы ИРБИС#Функции|языке форматирования систему ИРБИС]]. Функции классифицированы в соответствии с типом возвращаемого значения.
  
Функции могут иметь один или более ''аргументов'', которые необходимо задать для вычисления функции. Аргументы заключаются в скобки и разделяются запятыми.
+
==Запись в базе данных, используемая в примерах==
  
Аргументы могут быть следующих трех типов: [[Язык форматирования системы ИРБИС#Понятие формата|формат]], [[Язык форматирования системы ИРБИС#Числовые выражения|числовое выражение]], [[Язык форматирования системы ИРБИС#Команды вывода полей|команда вывода поля]].
+
Если не оговорено противное, то все примеры по форматированию в последующих разделах ссылаются на [[Язык форматирования системы ИРБИС#Запись в базе данных, используемая в примерах|запись, используемую для тех же целей в статье '''Язык форматирования системы ИРБИС''']].
 
 
Аргументом функции может быть произвольный формат, который может содержать любую разрешенную команду за исключением [[функции REF]], в которой формат так же используется в качестве аргумента. Функции передается не сам формат, а текст, полученный в результате вычисления формата.
 
 
 
При использовании числового выражения в качестве аргумента функции, оно сначала вычисляется, и затем вычисленное значение передается функции.
 
 
 
В качестве аргумента могут быть команды вывода поля или подполя. Не допускается использовать в команде спецификацию смещение/длина.
 
 
 
Ниже описываются допустимые функции и соответствующие им аргументы. Функции классифицированы в соответствии с типом возвращаемого значения.
 
  
 
==Числовые функции==
 
==Числовые функции==
Строка 118: Строка 110:
 
Обратим внимание, что формат, расположенный в аргументе, вычисляется с использованием текущего [[#Команды режима вывода|режима вывода]]. Это является существенным, так как использование неправильного режима может привести к тому, что термин не будет найден в инвертированном файле. Как правило, следует использовать тот же режим, который применяется в [[Таблица выбора полей#ТВП для инвертированного файла|ТВП для инвертированного файла]].
 
Обратим внимание, что формат, расположенный в аргументе, вычисляется с использованием текущего [[#Команды режима вывода|режима вывода]]. Это является существенным, так как использование неправильного режима может привести к тому, что термин не будет найден в инвертированном файле. Как правило, следует использовать тот же режим, который применяется в [[Таблица выбора полей#ТВП для инвертированного файла|ТВП для инвертированного файла]].
  
==Подключение программ к формату (форматные выходы)==
+
==Строковые функции==
 +
 
 +
Строковые функции могут использоваться как операнды строковых выражений и как команды форматирования. Когда они  используются  как команды, значение функции будет форматироваться так, как если бы оно было полем документа.
 +
 
 +
===Функция F(выр-1, выр-2, выр-3)===
 +
 
 +
Функция F преобразует числовое значение из его внутреннего представления с плавающей точкой в символьную строку. Все три аргумента являются числовыми выражениями. Первый аргумент, выр-1, является числом, которое необходимо преобразовать. Второй аргумент, выр-2, – минимальная длина выходной строки, выделяемая для результата, и третий аргумент, выр-3, – количество десятичных цифр. Второй и третий аргументы необязательны. Отметим, однако, что если присутствует выр-3, то выр-2 не может быть опущено.
 +
 
 +
Выр-2 определяет минимальную длину, т. е. значением функции будет символьная строка длиной как минимум выр-2 символов, и если преобразуемое числовое значение требует выр-2 символов или меньше, оно будет выровнено по правой границе в пределах этой длины. Если количество символов, требуемое для представления значения выр-1, больше данной длины, то используются дополнительные позиции. В этом случае выходная строка будет длиннее, чем выр-2 символов.
 +
 
 +
Выр-3 определяет количество десятичных цифр дробной части Выр-1. Если оно опущено, то результат будет представлен в экспоненциальной форме. Если при этом также опущено выр-2, то по умолчанию длина выходной строки будет равна 16 символам. Если выр-3 присутствует, то результатом будет округленное представление выр-1 с фиксированной точкой с выр-3 цифрами после десятичной точки. Если выр-3 равно нулю, то выр-1 округляется до ближайшего целого числа и результатом будет целое число без десятичной точки.
 +
Если при преобразовании целых чисел и чисел с фиксированной точкой оказывается, что целая часть числа слишком большая для ее представления, то выходная строка заменяется последовательностью символов "*".
 +
 
 +
Функция F может использоваться для выравнивания колонки чисел по десятичной точке путем выбора соответствующей длины.
 +
 
 +
Примеры использования функции F:
 +
{| class="standard"
 +
!Выражение||Значение
 +
|-
 +
|<tt>f(1)</tt>||<tt>1.000000000E+00</tt>
 +
|-
 +
|<tt>f(1, 10)</tt>||<tt>1.000E+00</tt>
 +
|-
 +
|<tt>f(-1, 10, 2)</tt>||<tt>-1.00</tt>
 +
|-
 +
|<tt>f(1, 5, 2)</tt>||<tt>1.00</tt>
 +
|-
 +
|<tt>f(1, 8, 2)</tt>||<tt>1.00</tt>
 +
|-
 +
|<tt>f(mfn, 1, 0)</tt>||<tt>4</tt>
 +
|-
 +
|<tt>f(mfn, 2, 0)</tt>||<tt>4</tt>
 +
|-
 +
|<tt>f(mfn, 3, 0)</tt>||<tt>4</tt>
 +
|}
  
В формате вывода можно использовать программные функции, предназначенные для выполнения таких операций по форматированию, которые не могут быть выполнены с помощью собственно языка форматирования. Такие функции, подключаемые к формату, называются форматные выходы или формат-программы. По сути данные функции выходят за рамки собственно языка форматирования, а сама система просто предоставляет некоторый стандартный интерфейс передачи данных для таких функций.
+
===Функция REF(выражение, формат)===
  
С точки зрения языка форматирования формат-программы являются строковыми функциями с форматом в качестве аргумента. При этом сначала вычисляется аргумент, а затем он передается функции. Формат-программа возвращает строку символов, с которой система обращается так, как если бы она была полем форматируемого документа.
+
Функция REF позволяет извлечь данные из альтернативной записи файла документов той же самой БД. Первый аргумент - это числовое выражение, дающее MFN альтернативной записи, которая должна быть выбрана, а второй аргумент - это формат, который должен быть применен к этой записи. Если значение выражения не соответствует MFN ни одной из записей базы данных, то функция REF возвратит пустую строку.
  
Обращение к формат-программе в формате производится следующим образом:
+
Функция REF – очень мощное средство, поскольку позволяет объединить данные, хранимые в различных записях базы данных, в один выводимый документ. В большинстве случаев связывание записей непосредственно через MFN может оказаться неудобным. Более удобным является использование возможности [[#Функция L(формат)|функции L]]. Напомним, что функция L находит MFN, соответствующий термину доступа. Поэтому можно использовать ее для преобразования символьной строки в MFN. Для корректного использования функции L нужно установить однозначное соответствие между символьной строкой и соответствующим ей MFN. Инвертированный файл [[предоставляет возможность установить такое соответствие]].
&имя(формат)
 
где:
 
* '''<tt>&</tt>''' – идентификатор вызова формат-программы;
 
* '''<tt>имя</tt>''' – имя формат-программы;
 
* '''<tt>формат</tt>''' – аргумент.
 
  
Система предлагает для использования комплексную [[UNIFOR|формат-программу UNIFOR]], реализующую различные специфические функции.
+
Система не делает никаких предположений относительно природы связей, существующих между записями. Она просто предоставляет механизм связывания записей. При конкретном практическом применении пользователь сам определяет смысл связей посредством использования языка форматирования и специального проектирования базы данных. Например, если библиографическая запись описания статьи должна быть связана с записью соответствующего номера журнала, то необходимо поле для отражения природы этой связи (шифр номера журнала).
 +
 
 +
Далее заметим, что так как второй аргумент функции REF является форматом, то имеется возможность использовать данную функцию рекурсивно с установлением многоуровневой иерархический связи.
 +
 
 +
===Функция S(формат)===
 +
 
 +
Функция S возвращает текст, полученный в результате вычисления ее аргумента.
 +
 
 +
Как было отмечено ранее, в системе нет явных операторов для строковых выражений. Однако, функция S может использоваться для выполнения конкатенации строк.
 +
 
 +
Она оказывается довольно удобной в логических выражениях в качестве неявного оператора OR. Такое ее применение более эффективно по сравнению с явным использованием оператора OR. Например, следующие выражения:
 +
S(mdl, v10, v20, v30) : 'вода'
 +
v10 : 'вода' OR v20 : 'вода' OR v30 : 'вода'
 +
эквивалентны (они оба истинны, если хоть одно из полей 10, 20 или 30 содержит строку 'вода'), но первое будет выполнено гораздо быстрее второго.
 +
 
 +
Эта функция может также использоваться для конкатенации строк с целью последующего их вывода.
 +
 
 +
==Логические функции==
 +
 
 +
===Функция Р(команда вывода поля/подполя)===
 +
 
 +
Функция Р возвращает значение '''истина''', если форматируемая запись содержит по крайней мере один экземпляр поля или подполя, указанного в аргументе. В противном случае функция P возвращает значение '''ложь'''.
 +
 
 +
Например:
 +
{| class="standard"
 +
!Выражение||Значение
 +
|-
 +
|<tt>Р(v700)</tt>||<tt>Истина</tt>
 +
|-
 +
|<tt>P(v700^m)</tt>||<tt>Ложь</tt>
 +
|-
 +
|<tt>P(v80)</tt>||<tt>Ложь</tt>
 +
|}
 +
 
 +
===Функция A(команда вывода поля/подполя)===
 +
 
 +
Функция A возвращает значение '''истина''', если форматируемая запись не содержит ни одного экземпляра поля или подполя, указанного в аргументе.
 +
 
 +
Если отсутствует поле, то, естественно, отсутствуют и его подполя. Поэтому, если команда вывода специфицирует подполе, то функция A возвращает значение '''истина''', если поле присутствует, но в нем отсутствует соответствующее подполе, или если отсутствует все поле.
 +
 
 +
Например:
 +
{| class="standard"
 +
!Выражение||Значение
 +
|-
 +
|<tt>Р(v700)</tt>||<tt>Ложь</tt>
 +
|-
 +
|<tt>P(v700^m)</tt>||<tt>Истина</tt>
 +
|-
 +
|<tt>P(v80)</tt>||<tt>Истина</tt>
 +
|}
  
 
==Ссылки==
 
==Ссылки==
Строка 139: Строка 209:
 
* [[Операторы языка форматирования ИРБИС]]
 
* [[Операторы языка форматирования ИРБИС]]
 
* [[UNIFOR]]
 
* [[UNIFOR]]
 +
 +
Источники информации:
 +
* [[Общее описание системы ИРБИС64]]
  
 
[[Категория:Язык форматирования системы ИРБИС]]
 
[[Категория:Язык форматирования системы ИРБИС]]
 +
[[Категория:Анонсированные статьи]]

Текущая версия на 17:38, 3 февраля 2013

Ниже описываются функции, используемые в языке форматирования систему ИРБИС. Функции классифицированы в соответствии с типом возвращаемого значения.

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

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

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

Функция 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, текстовое значение аргумента просматривается слева направо. В отличие от функции VAL, извлекаются и используются все найденные числовые значения. Числовые значения должны быть разделены, по крайней мере, одним нечисловым символом.

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

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

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

Функция RMIN возвращает минимальное числовое значение из заданных. Числовые значения из значения аргумента извлекаются так же, как для функции RSUM.

В примерах предполагается, что поле 1 имеет четыре экземпляра, содержащие числа 10, 20, 30 и 40:

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

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

Функция RMAX возвращает максимальное числовое значение из заданных. Используется аналогично функции RMIN.

В примерах предполагается, что поле 1 имеет четыре экземпляра, содержащие числа 10, 20, 30 и 40:

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


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

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

В примерах предполагается, что поле 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 можно найти далее.

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

Строковые функции

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

Функция F(выр-1, выр-2, выр-3)

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

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

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

Функция F может использоваться для выравнивания колонки чисел по десятичной точке путем выбора соответствующей длины.

Примеры использования функции F:

Выражение Значение
f(1) 1.000000000E+00
f(1, 10) 1.000E+00
f(-1, 10, 2) -1.00
f(1, 5, 2) 1.00
f(1, 8, 2) 1.00
f(mfn, 1, 0) 4
f(mfn, 2, 0) 4
f(mfn, 3, 0) 4

Функция REF(выражение, формат)

Функция REF позволяет извлечь данные из альтернативной записи файла документов той же самой БД. Первый аргумент - это числовое выражение, дающее MFN альтернативной записи, которая должна быть выбрана, а второй аргумент - это формат, который должен быть применен к этой записи. Если значение выражения не соответствует MFN ни одной из записей базы данных, то функция REF возвратит пустую строку.

Функция REF – очень мощное средство, поскольку позволяет объединить данные, хранимые в различных записях базы данных, в один выводимый документ. В большинстве случаев связывание записей непосредственно через MFN может оказаться неудобным. Более удобным является использование возможности функции L. Напомним, что функция L находит MFN, соответствующий термину доступа. Поэтому можно использовать ее для преобразования символьной строки в MFN. Для корректного использования функции L нужно установить однозначное соответствие между символьной строкой и соответствующим ей MFN. Инвертированный файл предоставляет возможность установить такое соответствие.

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

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

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

Функция S возвращает текст, полученный в результате вычисления ее аргумента.

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

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

S(mdl, v10, v20, v30) : 'вода'
v10 : 'вода' OR v20 : 'вода' OR v30 : 'вода'

эквивалентны (они оба истинны, если хоть одно из полей 10, 20 или 30 содержит строку 'вода'), но первое будет выполнено гораздо быстрее второго.

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

Логические функции

Функция Р(команда вывода поля/подполя)

Функция Р возвращает значение истина, если форматируемая запись содержит по крайней мере один экземпляр поля или подполя, указанного в аргументе. В противном случае функция P возвращает значение ложь.

Например:

Выражение Значение
Р(v700) Истина
P(v700^m) Ложь
P(v80) Ложь

Функция A(команда вывода поля/подполя)

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

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

Например:

Выражение Значение
Р(v700) Ложь
P(v700^m) Истина
P(v80) Истина

Ссылки

См. также:

Источники информации: