append в aml

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
Ответить
Анна
Завсегдатай
Сообщения: 386
Зарегистрирован: 07 фев 2004, 14:31
Репутация: 7
Откуда: Лозанна
Контактная информация:

append в aml

Сообщение Анна »

добрый день,
подскажите пожалуйста, каким образом сделать append (в aml-скрипте) для всех покрытий в директории, если ни их количество ни имена заранее не известны?
estensive search в support-esri ничего не дал (может плохо искала конечно)
спасибо!
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: append в aml

Сообщение Максим Дубинин »

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

Код: Выделить всё

/* get a list of all file names to use
&do
  &s inf = covs.lst
  &if [filelist * covs.lst -cover] < 0 &then
    &ret Error creating coverage list
&end

/* Open list file if able 
&s infile := [open %inf% status -read]
&if %status% <> 0 &then
   &return &warning Error opening file.
&setvar current := [read %infile% readstatus]
&if %readstatus% <> 0 &then
   &return &warning Could not read file.

/* Create fake coverage to start with, should be taken from somewhere else, so it is not in the covs.lst
&s i := 0
&s prevoutput := new0
append %prevoutput%
..\3\theme0
~
Y
Y
build %prevoutput% point

/* Select each coverage from list and append it
&do &while %readstatus% = 0
    &s i := %i% + 1
    &s output := new%i%
    &do
     &type Appending %prevoutput%
     append %output%
     %prevoutput%
     %current%
     ~
     Y
     Y
     build %output% point
     /* Read next line. 
     &setvar current := [read %infile% readstatus]
     kill %prevoutput%
     &s prevoutput := %output%
    &end
&end
пристегивайтесь, турбулентность прямо по курсу
Анна
Завсегдатай
Сообщения: 386
Зарегистрирован: 07 фев 2004, 14:31
Репутация: 7
Откуда: Лозанна
Контактная информация:

Re: append в aml

Сообщение Анна »

супер! огромное спасибо!!
теперь правда буду думать как убрать использование покрытия-fake, потому что он конечно лишним оказывается в результирующем покрытии

еще раз огромное спасибо!
Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9129
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 748
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: append в aml

Сообщение Максим Дубинин »

попробуй сначала считать из списка первое покрытие и его использовать, а не левое

я правда не помню, запоминается ли положение курсора при чтение (т.е. при след. чтение начнет со 2 строки), но мне кажется, что должно. Мне лень было проверять.
пристегивайтесь, турбулентность прямо по курсу
Анна
Завсегдатай
Сообщения: 386
Зарегистрирован: 07 фев 2004, 14:31
Репутация: 7
Откуда: Лозанна
Контактная информация:

Re: append в aml

Сообщение Анна »

вот еще вариант - чтобы не надо было создавать покрытие_fake

Код: Выделить всё

/* get a list of all file names to use
&do
  &s inf = covs.lst
  &if [filelist * covs.lst -cover] < 0 &then
    &ret Error creating coverage list
&end

/* Open list file if able
&s infile := [open %inf% status -read]
&if %status% <> 0 &then
   &return &warning Error opening file.
&setvar current := [read %infile% readstatus]
&if %readstatus% <> 0 &then
   &return &warning Could not read file.


&s i := 0
&setvar prevoutput := %current%
copy %prevoutput% %prevoutput%_back
  
/* Select each coverage from list and append it
&do &while %readstatus% = 0
    &s i := %i% + 1
    &s output := result%i%
    &do
     &setvar current := [read %infile% readstatus]
	 &type Appending %current%
     append %output%
     %prevoutput%
     %current%
     ~
     Y
     Y
     build %output% point
	 kill %prevoutput%
     &s prevoutput := %output%
    &end
&end

&if [close %infile%] <> 0 &then
  &return &warning Unable to close %infile%.

&s infile2 := [open %inf% status -read]
&if %status% <> 0 &then
   &return &warning Error opening file.
&setvar current := [read %infile2% readstatus]
&if %readstatus% <> 0 &then
   &return &warning Could not read file.  

copy %current%_back %current%
kill %current%_back

&if [close %infile2%] <> 0 &then
  &return &warning Unable to close %infile2%.
Анна
Завсегдатай
Сообщения: 386
Зарегистрирован: 07 фев 2004, 14:31
Репутация: 7
Откуда: Лозанна
Контактная информация:

Re: append в aml

Сообщение Анна »

все-таки еще переписала - теперь все вообще шоколадно работает

Код: Выделить всё

&s count := [filelist * outfile -cover -point]
&if %count% <= 0 &then 
  &return Error generating output file.
&s unit := [open outfile ok -read]

  &s prevoutput := [read %unit% ok]
  copy %prevoutput% %prevoutput%_back

&do i := 1 &to %count%
	&s output := result%i%
    &do
     &setvar current := [read %unit% ok]
	 &type Appending %current%
     append %output% point
     %prevoutput%
     %current%
     ~
     Y
     Y
 	 kill %prevoutput%
     &s prevoutput := %output%
    &end
&end

/* close and delete output file.
&s ok := [close %unit%]


&s unit1 := [open outfile ok -read]
&s current := [read %unit1% ok]
copy %current%_back %current%
kill %current%_back
rename %prevoutput% %current%result
&s ok := [close %unit1%]
&s ok := [delete outfile -file]
&return

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя