Операторы
Используемые в выражении операторы оцениваются в следующем порядке очередности:
- Операции в скобках,
- затем степень,
- затем умножение/деление,
- затем сложение/вычитание.
В выражениях можно использовать следующие операторы:
Арифметические операторы
Оператор | Результат для чисел | Результат для строк | Результат для булева выражения |
---|---|---|---|
+ | Сложение | Сочленение | Логическое 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", в зависимости от типа поля назначения.
При чтении данных из файла вам необходимо учитывать, что соответствующего преобразования из числовых значений в символьные в булевы выражения не происходит, поэтому вам нужно записывать преобразование самостоятельно.

В зависимости от данных ввода, выражение для символьных полей с текстом меток выглядит приблизительно так:
if [FLAG]="True", тогда обрабатывать хороший материал elseif [FLAG]="False", тогда обрабатывать плохой материал else брабатывать неизвестный материал endif
или для символьных полей с числовыми метками:
if [FLAG]="1", тогда обрабатывать хороший материал elseif [FLAG]="0", тогда ...
или для числовых полей:
if [FLAG]=1, тогда обрабатывать хороший материал elseif [FLAG]=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.