Полная версия
Макросы Datamine. Ресурсный геолог
Подсветка синтаксиса. Основные элементы синтаксиса выделяются различными цветами, что не только улучшает их визуальное восприятие, но и делает макрос более понятным всем, кто его читает. По умолчанию синтаксис Datamine, естественно, не предустановлен. Но ничто не запрещает вам создать свою личную, подходящую вам, подсветку, либо же воспользоваться подсветкой2, созданной одним из автором данной книги для себя.
Подсветка синтаксиса
Заготовки (сниппеты). При написании макроса часто применяются одни и те же команды. Чтобы не нужно было тратить время на их повторный набор, можно сохранить такие команды для повторного использования, а также ключевые слова для их запуска.
Автосохранение в памяти. При закрытии программы в ее памяти остается все, что там было на момент закрытия – вне зависимости от того, сохранили ли вы это явным образом или нет.
Подключение плагинов. С помощью подключаемых модулей можно серьезно расширять базовый функционал редактора. Плагины используются как для работы с различными языками программирования, так и для получения дополнительных возможностей, таких как совместная работа над одним проектом в нескольких редакторах (не обязательно Sublime), организация рабочих задач, подключение к системам управления версиями и т. д. Некоторые плагины абсолютно бесплатные, другие требуют регистрации, третьи полностью платные.
Преимущества
– Широкая функциональность. За счет достаточно разнообразного набора встроенных возможностей редактора, а также подключаемых расширений, редактор представляет собой, по сути, упрощенную среду разработки, а не просто инструмент для написания макроса. Помимо написания макросов, в нем можно писать скрипты, а также создавать интерфейс для запуска скриптов и макросов, т. к. редактор позволяет работать с HTML-разметкой.
– Быстродействие. Благодаря оптимизации собственного кода, а также выделения плагинов в отдельный процесс, редактор запускается и работает быстро даже с документами, состоящими из миллионов строк кода. Хотя на практике вряд ли вам встретятся такие объемные макросы. Авторы данной книги не встречали, да и сами не писали, макросы, в которых было бы больше 10000 строк.
– Простой и понятный интерфейс. Рабочая область в редакторе организована максимально удобно. Благодаря этому можно выполнить настройку под конкретные задачи, применять визуальное выделение, разграничивать на отдельные зоны для параллельной работы с несколькими файлами, часто используемые команды вывести на отдельную панель и т. д. Это не только облегчает работу уже опытному «макросописцу», но и снижает порог вхождения для новичков. Кроме того, минималистичный интерфейс редактора не перегружен ненужными функциями и легко воспринимается пользователем.
– Широкая поддержка. Редактор постоянно развивается основным разработчиком – компанией Sublime HQ. Для него выпущена подробная официальная документация, различные справочные и вспомогательные материалы. Также вокруг этого редактора сложилось достаточно широкое сообщество, представители которого пишут разнообразные плагины и помогают в решении возникающих проблем.
– Portable-версия. Если у вас нет прав администратора и вам запрещено устанавливать на компьютер программное обеспечение, то вы всегда можете скачать portable-версию с официального сайта и пользоваться ею.
Недостатки
– Нет готовых сниппетов.
Итог
Удобный, многофункциональный редактор кода, предоставляющий специалисту, который пишет макросы Datamine, широкие возможности. Он подойдет как профессионалу, так и начинающему макрописателю за счет гибко настраиваемого и минималистичного интерфейса, большого числа вспомогательных функций, упрощающих и ускоряющих написание макросов.
Visual Studio Code
Редактор Visual Studio Code (давайте дальше его для краткости именовать VSCode) распространяется свободно, то есть даром, компанией Microsoft. Скачивается с официального сайта3.
Ключевые возможности редактора
VSCode является «штатным» текстовым редактором для интегрированной среды программирования Visual Studio4, распространяемой Microsoft. Извлеченный из этой IDE, он сохранил многие полезные особенности «старшей сестры» (из которых, правда, далеко не все будут полезны при макрописательстве):
– Многоязычный интерфейс (русский в комплекте). Если у вас русскоязычная Windows, редактор при установке, скорее всего, это поймет и включит русский интерфейс по умолчанию.
– Поддерживаются темы оформления. Темная есть в базовой поставке. Создать свою тоже большой сложности не представляет.
Различные темы и цветовые стили
– Присутствует подсветка синтаксиса многих языков программирования по умолчанию (как-никак в «прошлой жизни» это была IDE). Правда, для подсветки языка макросов Datamine необходимо скачать и установить плагин.
– Поддерживается автозавершение слов: редактор по первым буквам вводимого слова пытается угадать, что хочет ввести пользователь, и предлагает варианты. Предлагаемые варианты автозавершения зависят от того, на каком языке программирования вы сейчас работаете. Например, VSCode не будет предлагать варианты автозавершения из Python или JavaScript после того, как догадается, что вы пишете макрос под Datamine. Также в списке вариантов автозавершения присутствуют слова, которые в активном документе уже есть.
– Поддерживает сниппеты (в русскоязычном варианте интерфейса они названы «пользовательские фрагменты кода»). Штука крайне полезная, позволяющая «вместо тысячи слов» набрать одно, которое будет заменено заготовкой, например, для запуска процесса или организации того или иного фрагмента вашего алгоритма (цикла, подпрограммы и т. д.). Можно создать свой файл сниппетов, можно скачать с репозитория, а можно воспользоваться списком сниппетов5, созданным одним из автором данной книги для себя.
– Если в один прекрасный день вам вдруг нестерпимо захочется написать код на каком-либо распространенном языке программирования – типа того же Python, VSCode позволит вам выполнять запуск и отладку вашего кода непосредственно в редакторе (правда, для этого тоже нужен отдельный плагин).
– Официальный репозиторий (хранилище плагинов и тем). Среди них встречаются и весьма полезные – как уже было сказано, например, с подсветкой синтаксиса и сниппетами для макросов Datamine.
Плагин подсветки синтаксиса макросов Datamine
– Если вы пользуетесь Git, редактор позволит вам контролировать версии с его помощью. Если это страшное слово вам ни о чем не говорит, сильно не расстраивайтесь – в конце концов, и мы и вы как бы не совсем программисты.
– Поддерживается работа со вкладками и разделение окна: как по горизонтали, так и по вертикали, что позволяет работать одновременно с разными фрагментами вашего документа или с разными файлами.
– Поддерживается уже известный нам множественный ввод.
– Присутствует автосохранение вкладок. При закрытии программы в ее памяти остается все, что там было на момент закрытия – вне зависимости от того, сохранили ли вы это явным образом или нет.
Разбиение рабочего окна на части. Приведенный пример, конечно, непрактичен, но при наличии крайне широкого монитора или нескольких не крайне широких – почему бы и нет?
– Редактор официально поддерживает переносной режим. Как его использовать, подробно объясняется здесь6 (да, надо немного владеть языком Вильяма нашего Шекспира… ну или онлайн-переводчиком на худой конец). Очень полезное свойство, которое позволяет пользоваться удобствами VSCode, даже если вам на работе запретили самостоятельно ставить новое ПО. Ну или как вариант – если вам придется работать на чужом компьютере.
– У редактора есть официальная онлайн-версия7 со всеми удобствами, что позволяет вам ваять макросы хоть бы и на планшете под «андроидом» (пробовали, получается).
VSCode довольно популярен среди любителей что-нибудь напрограммировать, поэтому решение большинства проблем и задач несложно найти на просторах Всемирной сети.
Notepad ++
Свободный текстовый редактор с открытым исходным кодом. Распространяется по лицензии GNU 3.0+ (General Public License), скачать можно на официальном сайте8. Данное лицензирование можно отнести как к плюсам – полностью бесплатное использование для любых нужд, так и к минусам – не использует платные инструменты и решения. Но для работы с макросами Datamine базовые функции Notepad++ сполна покрывают все необходимые потребности.
Ключевые возможности редактора
Данный редактор является одним из стандартов де-факто для разработки ПО на огромном количестве языков программирования, в том числе поддерживает синтаксисы нескольких достаточно редких языков программирования. Позволяет открывать, редактировать, сохранять файлы в более чем ста форматах. По умолчанию редактор поддерживает подсветку и автодополнение кода нескольких десятков языков программирования.
Так же редактор поддерживает множество видов кодировок, в том числе Windows-1251, и позволяет проводить преобразование кодировок для документа.
Настраиваемый интерфейс. Есть возможность настройки внешнего вида интерфейса программы, позволяет настроить и дополнить контекстное меню под конкретные задачи. Присутствует возможность работы в двух окнах для одновременного редактирования файлов (но, к сожалению, поддерживает только два окна), включение «карты» файла.
Присутствует возможность выбора и настройки визуальных стилей, загрузка готовых стилей, которые в огромном количестве созданы пользователями.
Работа с двумя файлами одновременно
Множественный ввод. Как и в редакторах, описанных ранее, Notepad++ поддерживает функцию множественного ввода.
Автоматическое заполнение. Также поддерживается автоматическое окончание записи.
Автосохранение в памяти. При закрытии программы в ее памяти остается все, что там было на момент закрытия – вне зависимости от того, сохранили ли вы это явным образом или нет. Также при редактировании файла визуально подсвечиваются строки, в которые были внесены изменения (в примере: оранжевая полоса напротив номера строки).
Подсветка синтаксиса. Редактор поддерживает и имеет готовые настройки подсветки синтаксиса для множества языков. Еще больше готовых вариантов можно скачать из сети. К сожалению, подсветки синтаксиса языка макросов Datamine нет, но редактор без проблем позволяет создать свой собственный набор для подсветки.
Заготовки (сниппеты). К сожалению, Notepad++ изначально не поддерживает функцию сниппетов. Но при желании можно добавить данный функционал, используя плагины.
Подключение плагинов. К редактору можно найти большое количество плагинов, которые значительно расширяют возможности при редактировании файлов. Все плагины полностью бесплатны и находятся в свободном доступе.
Portable-версия. Редактор официально поддерживает переносной режим. Скачать версию Portable можно с официального сайта, ссылка на который была приведена ранее.
$ Задание 2.1
Запустится ли данный макрос?
A) Да
B) Конечно нет. Datamine – уважаемое ПО и не запускает макросы, написанные в «Блокноте»
C) Нет. Datamine не понимает код без подсветки синтаксиса
Макросы
Структура макросов
Из чего состоят макросы
Итак, макрос – это текстовый файл. В этом текстовом файле содержится набор команд, которые необходимо выполнить Datamine для получения нужного вам результата. Команды макросов всегда начинаются с восклицательного знака. Команды макросов можно разделить на:
1. «Внутренние» команды макросов – команды для организации выполнения макроса. Давайте назовем их по-программистски «операторами». К этой разновидности команд можно отнести:
– Оператор присвоения LET. С помощью этого же оператора могут выполняться некоторые функции – как арифметические, так и строковые: получение целой части, абсолютного значения, максимума/минимума, степенные, показательные, логарифмические и тригонометрические функции; изменения регистра строки, определение длины строки, поиск подстроки в строке и т. д.
– Условный оператор IF.
– Оператор безусловного перехода GOTO.
– Операторы «общения» с пользователем ECHO и PROMPT.
– Операторы организации подпрограмм GOSUB и RETURN.
– Оператор запуска команд ОС OPSYS.
– Оператор запуска другого макроса XRUN.
– Операторы чтения файлов FILES и FIELD.
– Другие операторы, которые с ходу не вспомнить, но которые будут описаны по ходу настоящей книги.
– Другие операторы, которые с ходу не вспомнить и которые не будут описаны в книге, но которые вы наверняка найдете сами, если будете копаться в руководстве и справке.
2. Команды запуска процессов. Эти команды начинаются с имени соответствующего процесса, перед которым (ожидаемо) должен присутствовать восклицательный знак. Например, процесс EXTRA запускается командой `!EXTRA`.
Команды будут упомянуты и более подробно описаны по мере возникновения в них необходимости согласно логике изложения материала. Более «сухое» и официальное описание команд можно найти в справочных материалах.
Ограничения
Сразу пару слов об ограничениях (а вы думали, что все так просто?). До некоторой версии (мы сами не заметили до какой) длина одной строки в макросе не должна была превышать 80 символов. Причина такого ограничения, вероятно, уходила корнями в седую древность9 (если кто не знал, то код Datamine минимум до версий Datamine Studio 3.* был написан на практически «мертвом» Visual Fortran). Все, что выходило за пределы 80 символов, Datamine нагло игнорировал. С некоторых пор это ограничение снято, но мы бы рекомендовали его придерживаться с целью обратной совместимости – вдруг ваш макрос попадет в руки пользователю, который не в курсе, что вышли новые версии Datamine. Ну и плюс: если строка вашего макроса слишком длинная, читать его не очень удобно. Это не единственное ограничение, остальные будут описаны в подходящий момент.
Алгоритмы: что это и какие бывают
Алгоритм можно определить как набор правил для решения некоторой задачи. Или по-другому: алгоритм – это идея, тогда как конкретный макрос – его реализация.
Алгоритмы принято делить на:
– Линейные алгоритмы. Самый простой тип. Просто последовательность команд, выполняемых одна за другой. После первой команды всегда выполняется вторая, после второй всегда выполняется третья и т. д. Линейный алгоритм используется, когда все ясно и никаких вариантов развития событий не предполагается.
– Алгоритмы с ветвлением. Используется при возникновении вариантов развития событий.
если пойдет дождь – я поеду на автобусе,
если будет солнечно – прогуляюсь пешком,
если друзья предложат выпить пива – вообще никуда не пойду.
– Циклические алгоритмы. Описывают процессы, повторяющиеся много раз.
– «Каждый год 31 декабря мы с друзьями ходим в баню» – то есть один раз указывается действие, а затем сообщается, что это действие исполняется некоторое количество раз.
– Алгоритмы с подпрограммами. Перефразируя известного киноперсонажа, можно сказать: «Точно такие же, как и циклические, но другие». Об этом чуть позже.
При написании макросов вы будете писать обычные линейные алгоритмы, алгоритмы с ветвлением и, возможно, будете использовать циклы и подпрограммы. Обычно достаточно большой макрос содержит все разновидности алгоритмов. Далее будут описаны упомянутые варианты алгоритмов по принципу «от простого к сложному».
$ Задание 3.1
Какой тип алгоритма описан в этом увлекательном рассказе?
Одна старуха от чрезмерного любопытства вывалилась из окна, упала и разбилась.
Из окна высунулась другая старуха и стала смотреть вниз на разбившуюся, но от чрезмерного любопытства тоже вывалилась из окна, упала и разбилась.
Потом из окна вывалилась третья старуха, потом четвертая, потом пятая.
Когда вывалилась шестая старуха, мне надоело смотреть на них, и я пошел на Мальцевский рынок, где, говорят, одному слепому подарили вязаную шаль.
A) Мы такого не проходилиB) Циклический алгоритмC) Алгоритм с ветвлениемD) Линейный алгоритм$ Задание 3.2
Какой тип алгоритма описан в данном отрывке?
Размышляя таким образом, она пробралась в маленькую комнатку, сверкающую чистотой. У окна стоял стол, а на нем, как она и надеялась, лежал веер и несколько пар крошечных перчаток. Алиса взяла веер и пару перчаток и совсем уже собралась выйти из комнатки, как вдруг увидала у зеркала маленький пузырек. На нем не было написано: «ВЫПЕЙ МЕНЯ!», но Алиса открыла его и поднесла к губам.
A) Линейный
B) Циклический
C) Алгоритм с ветвлением
D) Мы такого не проходили
$ Задание 3.3
Какой тип алгоритма описан в этой пыхтелке?
Если б мишки были пчелами,
То они бы нипочем
Никогда и не подумали
Так высоко строить дом;
И тогда (конечно, если бы
Пчелы – это были мишки!)
Нам бы, мишкам, было незачем
Лазить на такие вышки!
A) Мы такого не проходили
B) Алгоритм с ветвлением
C) Линейный алгоритм
D) Циклический алгоритм
$ Задание 3.4
Какой тип алгоритма описан здесь?
Вот пистолеты уж блеснули,
Гремит о шомпол молоток.
В граненый ствол уходят пули,
И щелкнул в первый раз курок.
Вот порох струйкой сероватой
На полку сыплется. Зубчатый,
Надежно ввинченный кремень
Взведен еще. За ближний пень
Становится Гильо смущенный.
Плащи бросают два врага.
Зарецкий тридцать два шага
Отмерил с точностью отменной,
Друзей развел по крайний след,
И каждый взял свой пистолет.
A) Линейный алгоритм
B) Алгоритм с ветвлением
C) Мы такого не проходили
D) Циклический алгоритм
$ Задание 3.5
Какой тип алгоритма описан?
Раз он в море закинул невод, —
Пришел невод с одною тиной.
Он в другой раз закинул невод, —
Пришел невод с травой морскою.
В третий раз закинул он невод, —
Пришел невод с одною рыбкой,
С непростою рыбкой, – золотою.
A) Циклический алгоритм
B) Мы такого не проходили
C) Линейный алгоритм
D) Алгоритм с ветвлением
$ Задание 3.6
Какой тип алгоритма описан?
У попа была собака,
Он ее любил.
Она съела кусок мяса —
Он ее убил.
И в землю закопал.
И надпись написал:
«У попа была собака,
Он ее любил.
Она съела кусок мяса —
Он ее убил.
И в землю закопал.
И надпись написал:
«У попа была собака,
Он ее любил.
Она съела кусок мяса —
Он ее убил.
И в землю закопал.
И надпись написал:
…»
A) Циклический алгоритм
B) Алгоритм с ветвлением
C) Линейный алгоритм
D) Мы такого не проходили
Линейные алгоритмы
Линейные алгоритмы – это алгоритмы, когда «все ясно». То есть линейный алгоритм выглядит следующим образом: «Начало макроса – выполняем действие А, затем действие Б, действие В… конец макроса». Продолжая аналогию с реальной жизнью: «выключу компьютер, надену обувь, зайду в магазин…».
Однако, поскольку целью данной книги не является обучение тому, как правильно покидать рабочее место, перейдем непосредственно к написанию макроса.
Итак, давайте решим достаточно простую задачу: необходимо по файлу каркасов минерализации и полному файлу базы данных опробования создать рудную выборку. В наиболее простом случае процедура не предполагает каких-либо вариантов действий. Если выполнять ее вручную, последовательность действий можно описать так:
– Выборка проб каркасами минерализации с зональным контролем по полю номера рудного тела.
– Композитирование выбранных проб.
– Урезка ураганных содержаний.
Давайте для простоты предположим, что нам известно следующее (файлы для тестирования10):
– имя файла рудных каркасов – ore_tr/pt;
– имя файла скважин – holes;
– имя поля номера рудного тела – BODY;
– имя поля урезаемых содержаний – AU;
– средняя длина проб, к которой требуется привести рудную выборку – 1 м;
– оптимальная сеть декластеризации – данные расположены по регулярной сети;
– уровень ураганных содержаний одинаков для всех рудных тел – 100 г/т;
– имя файла обработанной рудной выборки holes_ore_cut.
На многих приводимых ниже картинках с фрагментами кода в начале строки можно видеть номер. Это просто номер строки, который не является частью макроса. Номера строк автоматически проставляются многими текстовыми редакторами. Это не часть текста, это просто номера строк, они «физически» – в виде символов текста – не существуют и нужны только для облегчения адресации пользователя, например: «в строке N выполняется такое-то действие».
Макрос, выполняющий все описанные выше действия, будет выглядеть следующим образом (macro111):
Смотрим, что тут написано.
Строка 1 – заголовок макроса и его имя (OREHOL).
Строка 3 – запуск процесса SELWF. Строки до появления следующего восклицательного знака (до строки 16 включительно) – это параметры запуска данного процесса:
– на строке 3, кроме имени запускаемого процесса Datamine, указано, что входным файлом для процесса SELWF является файл holes – &IN (holes);
– на строке 4 указано, что файлом треугольников каркасов минерализации является файл ore_tr – WERETR (ore_tr);
– на строке 5 указано, что файлом точек каркасов минерализации является файл ore_pt – &WERETR (ore_pt);
– на строке 6 указано, что выходным файлом для процесса SELWF является файл holes_ore_cut – &OUT (holes_ore_cut).
Строки 3—6 соответствуют вкладке Files процесса SELWF:
Вкладка Files процесса SELWF в интерфейсе Datamine и в макросе
Сравнивая строки 3—6 с вкладкой Files, можно заметить, что:
– поля входных и выходных файлов в макросе имеют то же имя, что и в интерфейсе процесса: поле в интерфейсе «IN» обозначается в макросе ∈
– используемые файлы в макросе помечаются знаком «&» – как «входящие», так и «результирующие»;
– имена файлов указываются в скобках;
– параметры друг от друга отделяются запятой; если описание процесса не помещается в одну строку (помним про ограничение в 80 символов), перенос осуществляется после запятой.
Строки 7—10 соответствуют вкладке Fields интерфейса.
Вкладка Fields процесса SELWF в интерфейсе Datamine и в макросе
Сравнивая строки 7—10 с вкладкой Fields, можно заметить, что:
– поля помечаются символом «*» перед именем параметра;
– пропущенные поля в интерфейсе процесса (оставленные незаполненными) в макросе не отображаются вовсе;
– имена полей указываются в скобках.
Строки 11—16 соответствуют вкладке Parameters интерфейса.