Операторы

Используемые в выражении операторы оцениваются в следующем порядке очередности:

  • Операции в скобках,
  • затем степень,
  • затем умножение/деление,
  • затем сложение/вычитание.

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

Арифметические операторы

Оператор Результат для чисел Результат для строк Результат для булева выражения
+ Сложение Сочленение Логическое OR
- Вычитание Недопустимая операция Логическое OR инвертированное
* Умножение Недопустимая операция Логическое AND
/ Деление Недопустимая операция Логическое AND инвертированное
^ Степень *1 *
% Остаток1 Недопустимая операция *

1 Оператор % (Остаток) рассчитывает остаток после деления. Например 12 % 10 = 2. Когда вы учились в школе, вы, вероятно, работали с таким утверждением как "12 поделенное на 10 равняется 1 с остатком 2" Точно также 20 % 10 равно нулю, поскольку остатка нет.

Операторы сравнения

Знак Оператор
> Больше
< Меньше
>= Больше или равно
<= Меньше или равно
= Равно
!= Не равно
  Содержит
  Не содержит

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

Поддерживаются следующие проверки диапазона:

(expr) (comparison operator1) (expr) (comparison operator2) (expr)

Где оба оператора сравнения меньше (или равны) или больше (или равны), но не оба.

Меньше чем или равно

a<b<c
например: 2<x<3 возвращает true if x больше чем 2 но меньше чем 3

a<=b<c
например: 2<=x<3 возвращает true if x больше чем или равно 2 но меньше чем 3

a<b<=c

например: 2<x<=3 возвращает true if x больше чем 2 но меньше чем или равно 3

a<=b<=c
например: 2<=x<=3 возвращает true if x больше чем или равно 2 и меньше чем или равно 3

Больше чем или равно

a>b>c
например: 2>x>3 возвращает true if x меньше чем 2 но больше чем 3

a>=b>c
например: 2>=x>3 возвращает true if x меньше чем или равно 2 но больше чем 3

a>b>=c
например: 2>x>=3 возвращает true if x is less than 2 но больше чем или равно 3

a>=b>=c
например: 2>=x>=3 возвращает true if x меньше чем или равно 2 и больше чем или равнo 3

Оператор имеет тот же приоритет, что и обычные операторы сравнения, поэтому:

2<=2+1<4

расценивается как True.

Логические операторы

Знак Оператор
& Логическое AND
| Логическое OR
! Логическое NOT (т.е. НЕ)

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

=[BLOCK] = "1" | [BLOCK] = "2" | [BLOCK] = "3"

То же выражение можно записать более кратко, используя функцию В (IN):

=IN([BLOCK], "1", "2", "3")

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

Анализатор выражения содержит условный оператор 'if'. Он имеет следующую синтаксическую структуру:

if <предикат> then <выражение_верное> elif | elsif | elseif <предикат> then <выражение_верное> else <выражение_неверное> endif | fi

Часть оператора elif | elsif | elseif может повторяться или полностью пропускаться. Логика в том, чтобы оценивать предикаты пока не будет найден один TRUE, после чего оценивать соответствующее <выражение_верное>. Если ни один предикат не оценивается TRUE, тогда оценивается <выражение_неверное>, и выдается как результат.

Вы можете использовать оператор 'if' следующим образом:

MCAF + if RECOVERY > 0,5 then MCAF * 2 else 0 fi

Иными словами, если RECOVERY (т.е. ИЗВЛЕЧЕНИЕ) больше, чем 0,5, тогда прибавляем MCAF (поправочный коэффициент затрат на добычу) * 2 к MCAF, в ином случае прибавляем 0 (ничего).

Для получения более подробной информации перейдите в тему Условные выражения.

Преобразования типов

Тип Числовое Стринг Булево выражение
Числовое - Строка, содержащая числовое значение, т.е. “5” для 5 -
Стринг Если возможно, числовое значение из строки. В противном случае NIL - -
Булево выражение 1, если TRUE. 0, если FALSE. "1", если ВЕРНОЕ (if TRUE.) . "0", если НЕВЕРНОЕ (if FALSE). -

Правила преобразования булевых выражений

При записи результатов выражений булевых значений {TRUE} или {FALSE} в файл, {TRUE} будет преобразовано в число 1 или в символ "1", в свою очередь,{FALSE} будет преобразовано в число 0 или в символ "0", в зависимости от типа поля назначения.

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

Операторы преобразования типов

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

=[RL] + "m"

даст неожиданный результат.

В этих случаях удобно использовать унарный оператор “#”, который можно применять для преобразования в строка операнда, условия или выражения. Поэтому:

=#[RL] + "m"

дает корректный результат.

Несколько примеров приведены в таблице ниже:

=3 + 4 производит число 7, в то время как:
=#(3 + 4) производит текст "7" и:
=#3 + 4 производит текст "34", где 3 и 4 просто связываются.

Если не утверждается обратное, тип выражения справа будет преобразован в тип выражения слева перед тем, как будет выполнена операция.

То есть "5,05" будет (сочлененным) результатом “5,0” + 5, а 10 будет (арифметическим) результатом 5,0 + “5”.

Литеральные константы имеют преимущество при определении типа контекста. Например:

=2 + "3"

оценивается как 5, но если A это переменная со значением 2,

=A + “3”

оценивается как 23.