Страница 1 из 1
append в aml
Добавлено: 17 мар 2010, 18:15
Анна
добрый день,
подскажите пожалуйста, каким образом сделать append (в aml-скрипте) для всех покрытий в директории, если ни их количество ни имена заранее не известны?
estensive search в support-esri ничего не дал (может плохо искала конечно)
спасибо!
Re: append в aml
Добавлено: 17 мар 2010, 19:03
Максим Дубинин
Пробовал на точках, вроде все работает. Наверное с переменными не очень изящно, но это уже дальше, если хочется надо улучшать.
Код: Выделить всё
/* 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
Re: append в aml
Добавлено: 17 мар 2010, 23:25
Анна
супер! огромное спасибо!!
теперь правда буду думать как убрать использование покрытия-fake, потому что он конечно лишним оказывается в результирующем покрытии
еще раз огромное спасибо!
Re: append в aml
Добавлено: 17 мар 2010, 23:55
Максим Дубинин
попробуй сначала считать из списка первое покрытие и его использовать, а не левое
я правда не помню, запоминается ли положение курсора при чтение (т.е. при след. чтение начнет со 2 строки), но мне кажется, что должно. Мне лень было проверять.
Re: append в aml
Добавлено: 18 мар 2010, 00:29
Анна
вот еще вариант - чтобы не надо было создавать покрытие_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%.
Re: append в aml
Добавлено: 20 мар 2010, 02:11
Анна
все-таки еще переписала - теперь все вообще шоколадно работает
Код: Выделить всё
&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