Вы находитесь здесь:Файлы и поля > Поля > Приступая к работе: Динамические выражения полей

Приступая к работе: Динамические выражения полей

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

Для примера:

=[K2O]-[NA2O]

Это простое выражение вычисляет разницу между полями K2O и NA2O. Знак равенства (=) сообщает приложению Micromine, что это выражение используется вместо регулярного файлового поля, а квадратные скобки обозначают каждое имя поля.

Квадратные скобки не являются обязательным элементом, однако одни упрощают распознавание имен полей в сложных выражениях. При этом, они становятся обязательными, если ваши имена полей содержат пробелы или служебные знаки, например "+" или "/".

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

Логические операции

Если вы хотите посмотреть, является ли K2O больше, чем NA2O? Все просто:

=[K2O] > [NA2O]

Это пример логического сравнения, который выдает верно (1), когда K2O больше, чем NA2O, и неверно (0), если это не так. Соответствующий (назначенный) набор цветов проходит от 0 до 1.

Пометка чисел и текста

Несмотря на то, что тип оператора преобразования # не является обязательным, его удобно включать туда, где вы хотите вывести текст. Особенно это касается объединения чисел и текста, поскольку оператор "+" присоединяет тестовые стринги, куда бы вы их не добавляли. Например:

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

Это высокопроизводительная функция облегчает создание сложных меток, объединяя любое число отдельных полей файла, однако здесь нужно быть предельно внимательными, потому что легко запутаться в том, содержат ли некоторые из этих полей числа. Например, просматривая напечатанную карту, вы можете не знать, какая метка будет правильной - "7" или "34".

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

="Область = " + #[ОБЛАСТЬ] + " кв м"

В данном примере #[ОБЛАСТЬ] помогает удостовериться в том, что содержимое поля ОБЛАСТЬ в файле всегда расценивается как символьный стринг, независимо от фактического типа поля (обратите внимание на пробел после = и перед кв м).

Для этого...

=if([NA2O] > 0) then "соотношение K:Na=" + " " + #([K2O] / [NA2O]) else "" endif 

Это выражение объединяет ряд различных элементов, чтобы показать соотношение K/Na во вводных данных. Чтобы избежать деления на ноль, в случаях, где [NA2O] > 0 применяется метка. Для ненулевых значений метка создается из трех отдельных частей: "соотношение K:Na=" префикс, соединенный с дополнительным пробелом + " " , соединенный с рассчитанным соотношение, которое приводится как текст #([K2O] / [NA2O]). Для записей, где NA2O равно нулю, утверждение else устанавливает метку на "нет" (пустые двойные кавычки "").

Примечание: Несмотря на то, что вы можете использовать выражения в большинстве полей текст/метка, в Micromine все же существует несколько функций, которые не поддерживают пометку с помощью выражения.

Редактор выражений

Вам наверное интересно, как можно отредактировать многострочное выражение в (относительно) небольшой строке ввода - просто щелкните правой кнопкой мыши и выберите опцию Редактировать выражение из всплывающего меню. Micromine выведет в просмотр отформатированную версию выражения с уже включенным =. В редакторе выражений также имеется список Доступных полей и Доступных функций, используя который вы можете легко и быстро построить выражения, дважды щелкнув по требуемым полю или функции. Вы также можете вводить значения вручную.

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

Несмотря на то, что верным будет ввести большое выражение в одну строку:

=if([K2O] > [NA2O]) then "Калиевый" else "Натриевый" endif

Гораздо проще прочитать выражение на нескольких строках:

 =if([K2O] > [NA2O]) = 0 then "Калиевый" else "Натриевый" endif 

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

Фильтры

Мы использовали выражение в полях цвета и текста, именно на этих примерах проще всего объяснить действия фильтров. Тем не менее, мы можем использовать выражения во всех случаях, когда на вводе используется поле. Две очевидных области - это фильтр и калькулятор.

Чтобы воспроизвести выражение [K2O] > [NA2O] в фильтре:

Примечание: Фильтр - это просто утверждение ift; then - это любая задача, которая применяет фильтр. Для утверждения else нет другого эквивалента, чем развернуть фильтр (сделать его обратным).

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

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

Функция IN (В) также может использоваться для проверки на присутствие какого-либо значения в одном или нескольких поля.

=IN("ЗНАЧЕНИЕ", [ПОЛЕ1], [ПОЛЕ2], [ПОЛЕ3])

Вычисления

Поскольку выражения подобны уравнениям и, конечно же, могут легко быть использованы как уравнения, имеет смысл применять их в вычислениях. Файл | Поля | Вычислить (выражение) - это новая функция расчета с основанием на выражении, которая дополняет старое поля калькулятора.

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

В новом калькуляторе с основанием на выражениях это будет выглядеть так:

Как вы видите, каждое выражение объединяет два вычисления в один шаг без пересортировки во временные переменные, предоставляя более простое решение, которое легко понять, и с которым легко работать.

Следующая/Предыдущая запись

При использовании функции Вычислить (выражение) вы увидите, что список Доступные поля включает имена полей с поставленным впереди < и добавленным > (применяется к каждому имени). Например, [EAST] будет сопровождаться символами [<EAST] и [EAST>]. Вы используете (<), чтобы получить значение этого поля из предыдущей записи, и применяете (>), чтобы получить значение поля из следующей записи.

Предположим, вы хотите измерить разницу между последовательными записями файла без скважин:

=[ЗНАЧЕНИЕ]-[<ЗНАЧЕНИЕ]

Построение цвета

В наши дни практически все работают с данными LiDAR, множество съемок производят облако точек, где каждая точка имеет атрибуты R,G,B в дополнение к стандартным X,Y,Z Другими словами, каждая точка знает свой цвет. Несколько неудобным при работе с этим типом данных является создание цвета из файла, который имеет отдельные поля для красного, зеленого и синего значений. В Micromine 2014 была представлена возможность автоматического отображения цвета непосредственно из поля цвета, это самое высокое ограничение, которое у вас было для ручного преобразования RGB-триплетов в число, которое могло понять приложение Micromine. В настоящее время вы можете просто использовать функцию RGB(), например таким образом:

=RGB([R],[G],[B])

где [R], [G] и [B] - это имена полей красный, зеленый и синий.

Выделить/использовать каждую N-ю запись

В этом примере выражение используется для просмотра, пометки или редактирования каждой N-ой записи без необходимости изменять файл вручную. Типичный сценарий "каждая N-ая" - это создать изолинии из ЦМП или поверхность сетки, а затем пометить каждую N-ую изолинию как Индекс, оставшиеся будут помечены как Промежуточные. Предположим вы создали двухметровые изолинии и хотите, чтобы изолинии Индекса были множителями 10.

 =if([ВЫСОТА] % 10) = 0 then "Индекс" else "Промежуточное" endif 

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

В примере с изолиниями превышения, которые являются множителями 10 имеют в остатке 0 и помечены как Индекс. Везде, где остаток будет ненулевым, он будет помечен как Промежуток. Вы можете использовать это выражение для создания меток прямо в ходе работы, либо использовать его в процессе Вычислить (выражение), чтобы получить постоянное поле метки.

Другой способ использования сценария "помечать каждую N-ую" - это упростить расчет просто использованием каждой N-ой записи. Новая переменная выражения [#record] ([#запись]) предоставляет доступ к номеру текущей записи. Чтобы использовать каждую 25-ю запись в вычислении или для пометки:

 =if([#запись] % 25) = 0 then "Пометить это" else "" endif 

Одна из возможных ловушек для невнимательных людей - то, что номера записей начинаются с 1, то означает, что первая запись не будет выбрана. Если это представляет проблему, просто вычтите 1 из номера (ID) записи:

 =if(([#запись]-1) % 25) = 0 then "Пометить это" else "" endif 

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

© MICROMINE Pty Ltd 2016