Все про скрипти

Виникла ще одна цікава задача.
Отже помічаємо (наприклад @Map.SelectByParameters) певні об’єкти, що вдовольняють умовам функції.
Припустімо, що їх, об’єктів, декілька - наприклад чотири.
Маю бажання зробити цикл, почергово звертаючись до кожного з них.
Нумерація (ID) у них (результат @Map.Selected.List) “2 10 96 171” тобто певної послідовності не має.
Яким чином взяти послідовно номери результату ф-ції @Map.Selected.List для обробки в циклі ф-цією @Map.SelectObject?
Або підкажіть будь ласка інший метод послідовного звернення до виділених об’єктів.
Пробував результат @Map.Selected.List обробляти @StringPart та тип змінних вирівняти не вдалося.

;Отримали список помічених об’єктів (роздільник - перенос строки)
$SOL=@Map.Selected.List
;зняли помітку
@Map.DeselectAll
@Text[1].Text=$SOL
$I=0
$SC=@Text[1].Count
%Loop
$I=$I+1
$O=@Text[1].Line[$I]
@Map.SelectObject $O
;
;Помічений лише один об’єкт з номером $O
;Додайте сюди код обробки
;
@Map.DeselectAll
@if $I<$SC then @Goto %Loop

Он як організовано роботу з масивами! (класичними “array”). Дякую!

Здравствуйте, есть тхт с очень большими количеством вот таких вот записей(между ФИО и кад номером знак табуляции)
Бабіч Сергій Михайлович 0223972200050010573
Рожков Валентин Викторович 0223972200050010523; 0123982200050010524
Рожкова Галина Валентинівна 0223972200050010526; 0123982200050010527
Рожкова Ольга Федосіївна 0223972200050010576
Рожков Віктор Сергійович 0223972200050010564; 0123972200050010565
Рожков Роман Степанович 0223972200050010611
Рожкова Зінаїда Володимирівна 0223972200050010607 0123972200050010608
Рожков Микола Альбертович 0223972200050010551 022397220005001052 0223972200050010553 0223972200050010554

и есть еще участки с кадастровыми номерами без фамилий. Помогите скриптецом чтобы по кадастровым номерам фимилии в участки вписались. Если был бы вид фамилия-кадастровый номер я бы еще осилил, а так вид фамилия- n… кадастровых номеров сложновато. Очень очень буду признателен! :unamused:

Доброго здоров’я всім!

В обмінному файлі такий вигляд

Прогнозується такий результат після обробки

Іванов

$Name=@Dialog.Ask Введіть прізвище (Вводимо Іванов)
$From=@Map.Selected.GetParameter ID7000520
$Path=/Proprietors/ProprietorInfo/Authentication/NaturalPerson/FullName/LastName
$Value=@XML.XPath $Path $From (маємо порожнечу, в яку необхідно вписати $Name)

Яким чином передати значення $Name та модифікувати «» в «Іванов» не формуючи щось на кшталт $Value=$Name. Тобто, звертаючись до тега ХМЛ, що має порожнє значення () вписувати значення тега та модифікувати його в такий, що містить значення.

Здається немає функції для “заповнення” ХМЛ по тегах, чи я помиляюся :question:
Я робив саме через $Value=$Name , тобто формував в скрипті повне значення необхідного параметру і призначував його через @Map.Selected.ChangeParameter.

+1 за $Value=$Name. делал так же.

Пропоную Вам скористатись @StringPartCount Char String та @StringPart Number String.

Спасибо, проблема уже решена)

Записать обменник со своим именем все-таки удалось, но вот трабл с хмл тегами.
$GRUR=@Map.Selected.GetParameter ID7000520
$Found=@XML.NodeCount /Proprietors/ProprietorInfo[1]/Authentication/LegalЕntity $GRUR
$URNM=@XML.XPath /Proprietors/ProprietorInfo[1]/Authentication/LegalЕntity/Name $GRUR
$GRLastName=@XML.XPath /Proprietors/ProprietorInfo[1]/Authentication/NaturalPerson/FullName/LastName $GRUR
что-то я понять не могу. есть заполненный тег ../LegalЕntity/Name но $Found=0, а $URNM=пустая строка. тут же вместо юр лица ввожу физ лицо и $GRLastName=Фамилия. почему с юр. лицами не дружит?

Русская буква E в LegalЕntity. Будьте внимательней.

Прошу помощи, дигитал подвисает. Написал скрипт который сравнивая кадастровые номера присваивает земельному участку ФИО из списка.
$C=@Map.SelCount
@if $С=0 then @Break Выделите объекты
$N=0
@Text[1].Load D:\2.txt //список со строками вида ‘Гейван Георгій Засімович.0123982200:05:001:0571’
$SC=@Text[1].Count // число строк в списке
%Start
$N=@Map.NextSelected $N // перебираем обьекты по 1
@if $N=0 then @Break
$KAD=@Map.Selected.GetParameter ID106 //параметр с кадастровым номером вида ‘0123982200:05:001:0571’
$I=0
%Loop
$I=$I+1
$z=@Text[1].line[$I] //перебираем строки в списке
$NM=@StringPart 1.$z //имя землепользователя
$Kadin=@StringPart 2.$z //кадастровый номер
@if $Kadin=$KAD then @Map.Object[$N].Parameter[ID20030] $NM //если находим совпадение по кад. номерам то в параметр 20030 записываем ФИО
@if $I<$SC then @Goto %Loop
@if $N<$C then @Goto %Start

строк в списке 3 тыс может дигитал не подвисает, а думаетб но что-то уж очень долго. (тренировался всего на 1 участке) txt и дмф прилагаю
.dmf (17 KB)
2.txt (3.16 KB)

В урезанном варианте(приложенные файлы) нет совпадений кадномеров и все проходит очень быстро, но без заполнения.

Смущает только одно:
@Map.Selected.GetParameter ID106
лучше заменить на
@Map.Object[$N].Parameter[ID106]

Доброго здоров’я всім!

Допоможіть будь-ласка знайти функцію, якою можна було би перевірити полігон на предмет того, чи містить він вкраплені контури (вирізані методом “Сложный полигон”, наприклад).

Вроде все заработало :smiley:, но только не могу понять как дополнить кодом, что если совпадение не найдено то строки которые не совпали записывались в отдельный txt.

Наскільки я зрозумів, масштабний коефіцієнт об’єкта, що був заданий при спеціальній вставці об’єкта в карту1 з карти3, зберігається в карті1.

Застосовувати функцію @Map.Object[$N].Scale 0 до всіх об’єктів карти1 і подальший запис змін в карті1 - означає втрату масштабного коефіцієнта для об’єктів, масштабні коефіцієнти яких не були рівними 0 :exclamation:

Через це, приведення об’єктів, масштабний коефіцієнт яких не рівний 0, до первинного вигляду, можливе лише шляхом копіювання в буфер обміну з карти1 і спеціальної вставки при масштабному коефіцієнті 0.

Інше питання - розміщення цього об’єкта після такої вставки (відео SpecialPaste.exe)SpecialPaste.exe (817 KB)

Можна просити розробників добавити скриптову функцію @Map.Object[N].Type що повертала-б тип об’єкта, в тому числі якщо полігон - тип полігону (збірний чи складний).
Інакше - писати скрипта перебору всіх об’єктів полігонів з аналізом наявності розриву в координатах (збірний полігоний і складний полігон); розділити полігон; аналізувати на перекриття отримані після розділення полігони (якщо є перекриття - значить полігон складний, якщо немає перекриття - полігон збірний); якщо полігон складний - повторити створення складного полігону, якщо полігон збірний - відмінити розділення полігонів. Частина коду підійде звідси.
За відсутності функції @Map.Object[N].Type - мабуть, тільки так.

А я не можу зрозуміти, як у Вас все запрацювало :wink:
От трохи поправив$C=@Map.SelCount @if $C=0 then @Break Выделите объекты $N=0 ;список со строками вида 'Гейван Георгій Засімович.0123982200:05:001:0571' @Text[1].Load D:\2.txt ;число строк в списке $SC=@Text[1].Count %Start ;перебираем обьекты по 1 $N=@Map.NextSelected $N @if $N=0 then @Goto %End ;параметр с кадастровым номером вида '0123982200:05:001:0571' $KAD=@Map.Object[$N].Parameter[ID106] $I=0 %Loop $I=$I+1 @if $I>$SC @Goto %EndLoop ;перебираем строки в списке $z=@Text[1].line[$I] ;имя землепользователя $NM=@StringPart 1.$z ;кадастровый номер $Kadin=@StringPart 2.$z ;если находим совпадение по кад. номерам то в параметр 20030 записываем ФИО @if "$Kadin"="$KAD" then @Map.Object[$N].Parameter[ID20030]=$NM @if "$Kadin"="$KAD" @Goto %Start @Goto %Loop %EndLoop @Text[2].Add $KAD @Goto %Start %End $CountText2=@Text[2].Count @If $CountText2<>0 @Text[2].Save D:\NoPresent.txt @If $CountText2<>0 then @Dialog.Message Не знайдено відповідності кадномера|Записано D:\NoPresent.txt else @Dialog.Message Знайдено всі відповідності кадномераПравда прийшлось перезберегти кодування текстового файла на: 1051 Ansi (кирилиця). Кадномери, що не знайшлися в текстовому файлі, записуються в D:\NoPresent.txt.

У Вас @if $С=0 then @Break Выделите объекты - кирилична літера.

Очень благодарен за квалификационную помощь,очень помогло :exclamation: :smiley:

не, ну в процессе я и $C подправил и в Ansi перекодил конечно, еще убрал “:”. вроде больше ничего не трогал. потестил на 20 участках все корректно было.
@if “$Kadin”=“$KAD” @Goto %Start за эту строчку особенное спасибо, должно сократить время в моем скрипте, как я сам не догадался!? :smiley: Да и вообще спасибо, что помогли! все понятно разжевали.