Вы находитесь здесь:Файлы и поля > Поля > Выражения > If-then-else (если-тогда-иначе)

Выражения if-then-else (если-тогда-иначе)

Будьте внимательны, работая с оператором “#” при преобразовании результата сложных выражений. Результат может быть неожиданным, особенное если вы используете оператор “#” для преобразования типа результата выражение 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 значимым цифрам, которые получаем, преобразовывая число в текст.

© MICROMINE Pty Ltd 2016