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

В Редакторе выражений вам доступны условные выражения. При нажатии на условное выражение в панели справки отображается предварительный просмотр. Если вы дважды нажимаете мышкой на условное выражение, выражение вставляется в редактор:

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 части:

  1. Сравнение, которое выдает TRUE (ВЕРНО) или FALSE (НЕВЕРНО).
  2. Условие “then” (применяемое, когда ВЕРНО).
  3. Условие “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 значимым цифрам, которые получаем, преобразовывая число в текст.