Читать книгу Макросы Datamine. Ресурсный геолог - - Страница 10

Макросы
Линейные алгоритмы

Оглавление

Линейные алгоритмы – это алгоритмы, когда «все ясно». То есть линейный алгоритм выглядит следующим образом: «Начало макроса – выполняем действие А, затем действие Б, действие В… конец макроса». Продолжая аналогию с реальной жизнью: «выключу компьютер, надену обувь, зайду в магазин…».

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

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

– Выборка проб каркасами минерализации с зональным контролем по полю номера рудного тела.

– Композитирование выбранных проб.

– Урезка ураганных содержаний.

Давайте для простоты предположим, что нам известно следующее (файлы для тестирования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 интерфейса.


Вкладка Parameters процесса SELWF в интерфейсе Datamine и в макросе


Сравнивая строки 11—16 с вкладкой Parameters, можно заметить, что:

– параметры вкладки Parameters помечаются символом «@»;

– значения числовых параметров указываются с помощью знака равенства;

– параметры друг от друга отделяются запятой;

– никакого разделения на вкладки (как в интерфейсе процесса) нет.

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

– запуск процесса начинается с имени процесса и восклицательного знака перед ним;

– все параметры имеют то же имя, что и в графическом интерфейсе процесса;

– имена файлов предваряются символом амперсанда «&»;

– имена полей предваряются символом звездочки «*»;

– параметры предваряются помечаются символом «собаки» – «@»;

– имена файлов и полей заключаются в скобки;

– значения числовых параметров указываются с помощью знака равенства;

– параметры друг от друга отделяются запятыми.

Внимание: описание параметров запуска процесса не может заканчиваться запятой, т. к. это приведет к зависанию макроса (но не приведет к появлению ошибки). Возможна и другая неприятность: потеря запятой. Все параметры, которые вы с такой тщательностью подбирали, но которые указаны после «потерянной» запятой, будут проигнорированы. И здесь два варианта: либо указанные вами параметры необязательные и процесс будет выполнен с параметрами по умолчанию, либо макрос остановится, так как один из процессов не нашел всех нужных ему параметров. Второй вариант лучше – вы хотя бы увидите, что в макросе ошибка. В общем, к запятым в языке макросов надо относиться очень внимательно.

Пожалуй, некоторыми особенностями обладает только процесс EXTRA. Описание параметров у него завершается на строке 42 параметром @APPROX=0.0. Причем, после этого параметра нет запятой (то есть описание параметров процесса завершено). Основной функционал содержится в строках с 44 до команды GO (строка 47). Процесс EXTRA всегда завершается командой GO (без запятой в конце и восклицательного знака в начале).


Крайний правый знак на строке 16 приведет к зависанию макроса. Сообщение об ошибке при этом не появится. Макрос просто будет «висеть», изображая работу


Отсутствие запятой в строке 14 приведет к игнорированию параметров CHECKROT и ALLPTS. Ошибка в данном случае также не проявится, поскольку параметры необязательные


Можно было заметить, что при разборе макроса ничего не было сказано о вкладке Retrieval, на которой указываются логические условия выполнения процессов. Эти условия в макросе указываются точно так же, как они указываются при «обычном» запуске процесса. От предыдущих параметров эти условия также отделяются запятыми. То есть вот такое условие:

!COPY $IN (holes),&OUT (hol_rich),AU> 10

заставит Datamine скопировать из файла holes в файл hol_rich пробы с содержаниями золота не ниже 10 г/т. Если требуется указать более одного условия, они перечисляются через запятую:

!COPY $IN (holes),&OUT (hol_rich),AU> 10,AG> 50

При этом, как и в «ручном» запуске процесса оба условия будут выполняться одновременно – то есть во втором случае в файл hol_rich будут скопированы пробы с содержанием золота не меньше 10 г/т и серебра не менее 50 г/т.

Ну и, завершая разбор первого макроса, следует упомянуть, что макрос завершается строкой 51, на которой сообщается, что макрос завершен: END.


Перед решением заданий

Задания дальше по книге можно решать двумя способами:

– Набрать соответствующий текст макроса и попытаться запустить.

– Внимательно прочитать текст макроса и попытаться понять, как он будет работать.

Мы бы очень хотели, чтобы вы выбрали второй путь. Собственно, для этого тексты макросов приведены в виде картинок. Умение бездумно набирать и запускать макросы – это немного не тот навык, который мы бы хотели вам передать. Огромная просьба: не пытаться мухлевать, а постараться реально решать задания. В конце концов, мы не в школе, родителей к директору никто вызывать не собирается, на второй год оставлять – тоже.


$ Задание 3.7

Чем завершится выполнение данного макроса?


A) Создастся точная копия входного файла с именем holes_extra

B) Зависанием Datamine до принудительного завершения пользователем работы макроса

C) Всем значениям в существующем поле AU присвоится 0. Если поле AU отсутствовало во входном файле, оно создастся

D) Процесс выполнится, но выходной файл не создастся

E) Ошибкой


$ Задание 3.8

Чем завершится выполнение данного макроса?


A) Зависанием Datamine до принудительного завершения пользователем работы макроса

B) Всем значениям в существующем поле AU присвоится 0. Если поле AU отсутствовало во входном файле, оно создастся. Параметр APPROX проигнорируется, в выходном файле также будет создано поле @APPROX, значение которого будет равно 0

C) Процесс выполнится, но выходной файл не создастся

D) Ошибкой

E) Всем значениям в существующем поле AU присвоится 0. Если поле AU отсутствовало во входном файле, оно создастся

F) Создастся точная копия входного файла с именем holes_extra


$ Задание 3.9

Чем завершится выполнение данного макроса?


A) Зависанием Datamine до принудительного завершения пользователем работы макроса

B) Всем значениям в существующем поле AU присвоится 0. Если поле AU отсутствовало во входном файле, оно создастся

C) Процесс выполнится, но выходной файл не создастся

D) Ошибкой

E) В файл holes_extra будут скопированы записи с содержанием золота 0


$ Задание 3.10

Чем завершится выполнение данного макроса?


A) Ошибкой

B) Создастся точная копия входного файла с именем holes_extra

C) Процесс выполнится, но выходной файл не создастся

D) Всем значениям в существующем поле AU присвоится 0. Если поле AU отсутствовало во входном файле, оно создастся

E) Зависанием Datamine до принудительного завершения пользователем работы макроса


$ Задание 3.11

Чем завершится выполнение данного макроса?


A) Всем значениям в существующем поле AU присвоится 0. Если поле AU отсутствовало во входном файле, оно создастся

B) Создастся точная копия входного файла с именем holes_extra

C) Ошибкой

D) Процесс выполнится, но выходной файл не создастся

E) Зависанием Datamine до принудительного завершения пользователем работы макроса


$ Задание 3.12

Чем завершится выполнение данного макроса?


A) Создастся точная копия входного файла с именем holes_extra

B) Зависанием Datamine до принудительного завершения пользователем работы макроса

C) Процесс выполнится, но выходной файл не создастся

D) Всем значениям в существующем поле AU присвоится 0. Если поле AU отсутствовало во входном файле, оно создастся

E) Ошибкой

$ Задание 3.13

Чем завершится выполнение данного макроса?


A) Ошибкой, так как параметра *RUDA в процессе SELWF нет

B) В выходной файл выберутся пробы, находящиеся внутри каркаса ore_tr/pt. Создастся дополнительное поле BODY

C) Зависанием Datamine до принудительного завершения пользователем работы макроса.

D) Процесс выполнится, но выходной файл не создастся

E) Создастся точная копия входного файла с именем hol_sel

F) В выходной файл выберутся пробы, находящиеся внутри каркаса ore_tr/pt. Создадутся дополнительные поля BODY и ORE


$ Задание 3.14

Чем завершится выполнение данного макроса?


A) В выходной файл выберутся пробы, находящиеся внутри каркаса ore_tr/pt. Создастся дополнительное поле BODY

B) Создастся точная копия входного файла с именем hol_sel

C) Процесс выполнится, но выходной файл не создастся

D) Ошибкой

E) Зависанием Datamine до принудительного завершения пользователем работы макроса

$ Задание 3.15

Чем завершится выполнение данного макроса?


A) Ошибкой

B) Зависанием Datamine до принудительного завершения пользователем работы макроса

C) В выходной файл выберутся пробы, находящиеся внутри каркаса ore_tr/pt. Создастся дополнительное поле BODY

D) Создастся точная копия входного файла с именем hol_sel

E) Процесс выполнится, но выходной файл не создастся

$ Задание 3.16

Чем завершится выполнение данного макроса?


A) Создастся точная копия входного файла с именем hol_sel

B) В выходной файл выберутся пробы, находящиеся внутри каркаса ore_tr/pt. Создастся дополнительное поле BODY. Абсолютно все параметры проигнорируются

C) Процесс выполнится, но выходной файл не создастся

D) Зависанием Datamine до принудительного завершения пользователем работы макроса

E) Ошибкой

F) В выходной файл выберутся пробы, находящиеся внутри каркаса ore_tr/pt. Создастся дополнительное поле BODY

G) В выходной файл выберутся пробы, находящиеся внутри каркаса ore_tr/pt. Создастся дополнительное поле BODY. Все параметры после @SELECT=3.0 проигнорируются


$ Задание 3.17

Чем завершится выполнение данного макроса?


A) Ошибкой

B) Выходной файл отсортируется по полю BHID

C) Выходной файл отсортируется по полям BHID и FROM

D) Зависанием Datamine до принудительного завершения пользователем работы макроса

E) Выходной файл отсортируется по полю FROM

F) Процесс выполнится, но выходной файл не создастся

$ Задание 3.18

Чем завершится выполнение данного макроса?


A) Процесс выполнится, но выходной файл не создастся

B) Выходной файл отсортируется по полям BHID и FROM

C) Выходной файл отсортируется по полю FROM

D) Выходной файл отсортируется по полю BHID

E) Ошибкой

F) Зависанием Datamine до принудительного завершения пользователем работы макроса

$ Задание 3.19

Чем завершится выполнение данного макроса?


A) Зависанием Datamine до принудительного завершения пользователем работы макроса

B) Ошибкой

C) Выходной файл композитируется с зональным контролем по полю BODY

D) Процесс выполнится, но выходной файл не создастся

$ Задание 3.20

Чем завершится выполнение данного макроса?


A) Успешным выполнением

B) Ошибкой

C) Вылетом Datamine

D) Процессы выполнятся, но выходной файл после команды EXTRA не создастся

E) Зависанием Datamine до принудительного завершения пользователем работы макроса

10

https://github.com/andrey-vyaltsev/MacrosDatamine/blob/main/Wf_and_holes.7z

11

https://github.com/andrey-vyaltsev/MacrosDatamine/blob/main/macro1.7z

Макросы Datamine. Ресурсный геолог

Подняться наверх