Основы макроязыка EASI (PCI Geomatica) Часть 4. Примеры автоматизации процессов
по адресу http://gis-lab.info/qa/easi4.html
Четвертая часть серии статей о языке EASI, несколько примеров автоматизации работы с данными.
Общие подходы к автоматизации процессов в EASI
В большинстве случаев автоматизация требуется для выполнения однотипных операций над растровыми данными. В одних случаях это могут быть однотипные растровые данные, которые необходимо одновоременно обработать. В других случаях необходимо создать скрипт для запуска набора операций над файлом по коменде пользователя. Автоматизация потоков операций над растровыми данными с помощью языка EASI может быть выполнена двумя путями:
- С помощью функций самого языка EASI
- С помощью специальных программ, позволяющих генерировать скрипты на языке 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"); # ...и удаляем его