Условные выражения
В Редакторе выражений вам доступны условные выражения. При нажатии на условное выражение в панели справки отображается предварительный просмотр. Если вы дважды нажимаете мышкой на условное выражение, выражение вставляется в редактор:
If-then-else (если-тогда-иначе)
Анализатор выражения содержит условный оператор '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 (ничего).
Преобразование типов
Будьте внимательны, работая с оператором “#” при преобразовании результата сложных выражений. Результат может быть неожиданным, особенное если вы используете оператор “#” для преобразования типа результата выражение If-then-else (если-тогда-иначе). Давайте рассмотрим эту ситуацию более детально.
В утверждении If-then-else имеются 3 части:
- Сравнение, которое выдает TRUE (ВЕРНО) или FALSE (НЕВЕРНО).
- Условие “then” (применяемое, когда ВЕРНО).
- Условие “else” (применяемое, когда НЕВЕРНО).
Если в выражении If-then-else нет знака решетки, тогда условия “then” и “else” расцениваются как текстовые или числовые, в зависимости от правил старшинства, как указано в таблице ниже:
=3 + 4 | производит число 7, в то время как |
=#(3 + 4) | производит текст "7", и |
=#3 + 4 | производит текст "34", где 3 и 4 просто связываются. |
Вставка символа решетки перед “if” НЕ меняет способ оценки условий “then” и “else”, однако не преобразует окончательный результат в символ.
В целом, если на выходе вы хотите получить текст (метки), вам необходимо привести условия “then” и “else” к символу, начав каждое из них с решетки. Поэтому вместо:
=#if (...) then (...) else (...) endif
Вам необходимо получить:
=if (...) then #(...) else #(...) endif
Вот несколько примеров того, как работает каждый вариант. На первом рисунке показаны параметры, используемые для просмотра четырех точек в Визексе:
Теперь давайте создадим выражение, которое будет показывать только большое значение. Наше намерение - создать метку с суффиксом “Left” (Слева) или “Right” (Справа), в зависимости от того, какое значение будет больше - слева или справа. Таким образом, для левой точки мы хотим, чтобы метка была “0,73 Справа”.
Чтобы получить данный результат, нам необходимо это выражение:
Теперь давайте рассмотрим некоторые варианты и оценим результат. В первую очередь, удалим функцию ROUND (ОКРУГЛЯТЬ):
Поскольку выходными данными является текст, колонка Десятичные (Decimal) для метки отключена. Когда числа преобразуются в текст, преобразование основывается на (первых) 7 значимых цифрах.
Что происходит, если мы не используем символ решетка:
Теперь условия “then” и “else” являются числовыми (поскольку первое значение является числовым). Это означает, что “ Left” и “ Right” расцениваются как 0. В связи с тем, что выходными данными являются числа, колонка Десятичные возвращается в игру (при этом текстовый суффикс, конечно же, теряется).
Теперь, если вместо “if” мы будем использовать “#if”:
Тогда условия “then” и “else” оцениваются таким же образом, как и в предыдущем примере (“ Left” и “ Right” равны 0). Однако решетка (#if), расположенная впереди, преобразовала вывод в символьный тип. Это означает, что колонка Десятичные больше не является активной, и мы возвращаемся к 7 значимым цифрам, которые получаем, преобразовывая число в текст.