Основы макроязыка EASI (PCI Geomatica) Часть 4. Примеры автоматизации процессов

Материал из GIS-Lab
Версия от 14:46, 28 июля 2012; Voltron (обсуждение | вклад) (Новая страница: «{{Статья|Опубликована|easi4}} {{Аннотация|Четвертая часть серии статей о языке EASI, несколько …»)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску
Эта страница опубликована в основном списке статей сайта
по адресу http://gis-lab.info/qa/easi4.html


Четвертая часть серии статей о языке EASI, несколько примеров автоматизации работы с данными.

Общие подходы к автоматизации процессов в EASI

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

  1. С помощью функций самого языка EASI
  2. С помощью специальных программ, позволяющих генерировать скрипты на языке EASI и запускать их. В частности, такие программы могут быть легко написаны на языке PERL

В этой статье мы рассмотрим простейшие примеры автоматизации данных с помощью EASI и PERL.

Выполнение операций над набором файлов – скрипт EASI

Пример простого скрипта для выполнения заданных однотипных операций над всеми файлами .pix в рабочей директории:

sys "dir *.pix /b > dirlist.txt              (создаем список фалов)

local int tfid                               (задаем набор переменных)
local string ReadLine

tfid = TEXTOpen("dirlist.txt", "r")          (открываем список файлов)
ReadLine = TEXTRead(tfid)                    (читаем первую строку файла)

While ReadLine <> "<EOF>"                    (начало цикла «до конца файла»)

fili=ReadLine                                (задаем прочитанную строку как параметр команды EASI – имя входного файла)

filo=ReadLine+”_out”                         (создаем имя выходного файла с суффиксом)
(Здесь помещаем список команд)

ReadLine = TEXTRead(tfid)                    (читаем новую строку файла)
EndWhile                                     (конец цикла)

Call TEXTClose(tfid)                         (закрываем список файлов...)
sys "del dirlist.txt                         (...и удаляем его)

Выполнение операций над набором файлов – запуск скрипта EASI из PERL

Для облегчения автоматизации обработки большого набора файлов их удобно хранить в разных директориях. Наример, все файлы называются однотипно (data.pix) но хранятся в разных директориях (s1, s2, s3 и т.д.). В таком случае для обработки каждого файла вы сможете использрвать один срипт EASI, который должен быть скопирован и запущен в каждой из директорий. Для этого мы используем простой скрипт на PERL.

#!/usr/local/bin/perl                                     # начало скрипта

system("dir s* /A:D /O:N /B >dirlist.txt");               # создаем список директорий
open (DAT, "dirlist.txt");                                # открываем список директорий

while (<DAT>)                                             # начало цикла «до конца файла»
{
$line = $_;                                               # читаем строку файла
$line =~ s/\n//;                                          # удаляем символ конца строки

chdir "$line";                                            # переходим в заданную директорию
system("copy D:\\xscripts\\myscript.eas script.eas /y");  # копируем скрипт EASI в директорию

system("easi r script");                                  # выполняем скрипт EASI
system("del script.eas");                                 # удаляем скрипт
chdir "..";                                               # возврящяемся в корневую директорию
}

close (DAT);                                              # закрываем и удаляем список директорий
system("del dirlist.txt");

Создание и запуск скрипта EASI из PERL

В ряде случаев бывает удобно созадать скрипт EASI из готовых команд с помощью программы на PERL. Приведем пример для импорта набора файлов в формате *.img с записью выходных файлов PCIDSK в разные директории:

#!/usr/local/bin/perl                       # начало скрипта

system("dir *.img /B >dirlist.txt");        # создаем список файлов
open (DAT, "dirlist.txt");                  # открываем список файлов
open (OUT, ">script.eas");                  # создаем скрипт EASI

while (<DAT>)                               # начало цикла «до конца файла»
{
$line = $_;                                 # читаем строку файла
$line =~ s/\n//;                            # удаляем символ конца строки
$line1 =~ s/.img//;                         # удаляем расширение

print OUT"                                  # запись команд в скрипт EASI
sys “mkdir $line1”                          # создание директории
fili=\"$line                                # импорт файла
filo=\"$line1\\img.pix
r fimport
";
}
close (OUT);

system(easi r script);                    # выполняем скрипт EASI...
system("del script1.eas");                  # ...и удаляем его

Ссылки по теме