Це не помилки логіки скриптувальників (!), а технічні помилки. І це, на мій погляд, НЕПРАВИЛЬНО З БОКУ РОЗРОБНИКІВ. Спочатку скрипти працювали за одними правилами. Тепер правила змінили і в багатьох скрипти просто перестали через це працювати. Доведеться тепер багатьом не оновлювати свої програми, а працювати на старих версіях. Бо я усім за раз не зможу оновити скрипти.
VictorR, на сайті digitals.at.ua я виклав повний опис майже усіх скриптових функцій із зручним структуруванням за їх призначенням українською мовою. Можете скопіювати їх в ексель і шукати.
Скрипт працює за тими правилами, які ви написали: якщо те - то на мітку ТАКУ, якщо не те - то на мітку ІНШУ. А якщо у ВАШОМУ скрипті мітка ТАКА=ІНША, то це лише ВАША ПОМИЛКА, а не розробників скриптових функцій, що викликаються командами ВАШОГО скрипта.
Вибачайте, пане Миколо. Думаю скоріше доведеться вам оновлювати скрипти. Хай не за раз, і не за два. А втім - це залежить від користувачів, які ними користуються. Одне я знаю точно - свої скрипти просто необхідно відлагоджувати… і супроводжувати… щоб ними користувались. Ніхто ж не каже “давайте приберемо необхідність компілювати програмний код (в Delphi), а то при компіляції мого коду воно, гадость така, видає що в мене якась помилка в коді” .
А за додану розробниками можливість виявлення помилки логіки алгоритму - жирний +.
Під технічною розумію помилку, яка ніяк не впливає на роботоздатність скрипту (не впливала, поки не оновили Digitals)
Ось наприклад:
$MC=@Map.Layers.Count
$N=0
%PochatokSSh3
$N=$N+1
%PochatokSSh3
$Status=@Map.Layers.GetAttributes $N
$Status=@StringPart 7 $Status
Тут друга мітка %PochatokSSh3 не грала абсолютно ніякої ролі. І так би собі й було надалі, але ні, бо комусь це стало дуже заважати.
Просто при створенні скрипту вийшло таке упущення. Якби зразу програма це виявляла якось - то ніяких проблем би не було. Але програма ж зразу це не виявляла. А тепер раптом розробникам захотілося, щоб вона це виявляла. Не гарно получається просто. Я це перероблю. Потрачу час, але перероблю усім. Але просто так не робиться.
Я не вчився на програміста, а самоучка. Тому, роблячи скрипти, виходжу тільки з того, щоб вони працювали. Тестую їх на різноманітних випадках. І досі вони усі працювали. А те, що в коді вийшла ось така чисто технічна помилка - не побачив, бо вона не заважала. А перевіряти код на те, як він грамотно написаний з точки зору підручників з програмування - це не моє. Та й на скільки знаю, щоб писати скрипти не обов’язково бути великим програмістом. Для цього скрипти в програмі і передбачені, щоб можна спрощено зробити те, що потрібно.
Я здогадуюся, чому для вас Voha, цей плюс такий жирний. То й користуйтеся вашим плюсом. А для мене це більше мінус, думаю, як і для багатьох інших користувачів.
Ладно, додали таку перевірку на дублювання міток. Не знаю хто конкретно це додав. Але хоч би по людськи це зробили якось. А то в половини користувачів видає помилку про дублювання міток, а в половини скрипт просто ніяк не реагує на запуск. І думай-гадай, що з ним не так. Можна ж було зробити, щоб хоч нормально інформувало користувачів, в чому причина того, що скрипт не запускається. Але кому це потрібно.
Правильно. Тільки не “стало заважати”, а таки конкретно дошкуляло: сам не один раз мусив аналізувати тисячі рядків лог-файла (ще не вмерла надія на режим відлагодження скриптів зі ScriptDebugger=1 в константах), щоб виловити помилку логіки алгоритму. Дублі міток спричиняли переходи не на ту гілку, на яку треба. Але в мене не було “порожніх” міток! Якщо була мітка - були й команди, що виконувались тоді, коли за логікою не повинні були виконуватись.
Добре, коли людина думає не лише про себе. Погодьтесь нарешті, це полегшить роботу з розробкою іншим, хто також пише скрипти. І надалі, у нових скриптах, забезпечить відсутність помилок логіки алгоритму. Почитайте, будь-ласка, за посиланням у пості вище - це критичні помилки, які важко виявити.
Все правильно, Миколо. І я також не вчився на програміста: складання скрипта - це ж не справа рук навіть середнього рівня програміста. І не треба бути класним програмістом, щоб зрозуміти: скрипт - це послідовність виконання команд. Послідовність ця визначається у скрипті переходами на мітки, і якщо є дві чи більше міток з однаковою назвою - то і послідовність виконання є помилковою (або одна гілка “мертва”, а значить - сміття). То байка, якщо сміття закоментоване символом “;”, але ж для помпутера символ “%” щось таки має означати? Чи у вашому випадку - нехай не означає? Так означає? Чи не означає? Для скрипта “%” - спеціальний символ переходу на таку-то послідовність дій, незалежно від того програміст перед компом, чи землевпорядник!
Так можна ж почути програмістів, а поки - що ми маємо:
для прикладу в ліспроекті: беремось складати цифрову карту, а не хочемо розібратись із типами об’єктів цієї карти, бо це вже бач ГІС (вища наука);
беремося складати послідовність - а не хочемо робити це послідовно, бо це вже бач супер високого рівня “програмування”.
Послідовність ця називається алгоритмом, а слово “алгоритм” ще в школі вчать, і до програмування вищого рівня від алгоритму - як “до неба рачки”. Я жодним чином не беруся когось оцінювати та порівнювати. З ким мені ще про скрипти? Мабуть карантин впливає.
Те, що скрипт не запускається, лише підтверджує серйозність вашої помилки. А як цей ящик по вашому має виконати послідовність, якщо вона не визначена? Вимушений ще раз констатувати факт: інструментальний скрипт, в якому є дублі міток, не запускається. Функціональний скрипт, що містить дублі міток, будучи викликаний з інструментального скрипта, дає помилку виконання Duplicate label з посиланням на викликаючий скрипт.
Думаю нам дискусію слід припинити, поза як поняття алгоритму (послідовності виконання операцій) ні вам, ні мені, ні будь-кому іншому не змінити. Як на мене - гарна була дискусія, предметна.
@Map.FromPLG - PLG - польський текстовий формат, містить інфо по пікетам, а-ля DAT-файл. @Map.Lock - закриває вміст скриптів карти від дебагера. @Map.Object[N].Filter [MinDistance] - в об’єкті видаляє відрізки меньші ніж MinDistance @Map.CreateExplication - Створює експлікацію 15-зем на основі xlt-шаблону.
вирішив поекспериментувати. Виконана у скрипті обробки події OnFileOpen першою командою (при відкриванні карти), ця функція забороняє редагування й перегляд тексту скриптів обробки події рівня карти та її шарів у редакторі коду скрипта. Таким чином: за неможливості відкрити карту без авто-запуску скрипта при відкриванні карти, це ідеальний спосіб захисту скриптів обробки подій не тільки від “чужих” очей, але й від себе самого (якби не ScriptDebugger=1).
Таке необхідне налагодження роботи складних скриптів, що викликають інші - функціональні скрипти, в покроковому режимі практично не можна виконати із-за відсутності в дебагері можливості встановити брейкпойнти (точки зупинки). Про це вже йшлося тут.
З дебагером не спішно: розумію, що важливішої роботи багато. Просто - нагадати.
Доброго времени суток. А есть ли обработчик события “изменение содержания таблицы”? тобишь когда меняется содержание объекта в слое с видом “table” нужно, чтоб срабатывал скрипт.
Попробуйте в новой версии событие %Events.OnChange, оно срабатывает для перемещений табличных объектов и при изменении содержимого таблицы через интерфейс.
Є у мене питання до розробників щодо зручності написання скриптів: чи можна зробити так, щоб у текстовому полі вікна редактора скриптів (на скріншоті, наведеному нижче, відміченому червоним кольором) відображалися перші, закоментовані рядки тексту скрипта, на назві якого знаходиться курсор списку команд?[attachment=0]DemoScrypt.jpg[/attachment]Функціональних скриптів у теці Library - десятки, із-за цього забуваєш: які параметри скрипт повинний приймати.
Не важко й подивитись, відкривши текст скрипта в текстовому редакторі, але ж питання в зручності.
Что-то эта функция у меня не работает совсем. Вроде кстати были попытки написания скрипта, который бы смещал подпись при условии если она пересекается с другими объектами.. Может кто подскажет, а то найти не могу.
Я именно так и делал) Разобрался в чем дело.. Когда надпись сильно большая, то может возникнуть ситуация, когда ее просто невозможно сдвинуть, чтоб она не пересекала какой-либо объект… соответственно она остается на месте.
Підкажіть, будь ласка, як замінити круглі дужки в текстовому рядку ( ) на такі слеші / /
пишу так: $Line=для будівництва і обслуговування житлового будинку, господарських будівель і споруд (присадибна ділянка)
$Line=@Calc Replace("$Line","(","/")
$Line=@DequoteText $Line
@Dialog.Message 1 $Line
$Line=@Calc Replace("$Line","(","/")
$Line=@DequoteText $Line
@Dialog.Message 2 $Line
другий месидж некоректно відображається
$Line=для будівництва і обслуговування житлового будинку, господарських будівель і споруд (присадибна ділянка)
$Line=@Calc Replace(Replace("$Line","(","/"),")","/")
$Line=@DequoteText $Line
@Dialog.Message $Line
$Line=для будівництва і обслуговування житлового будинку, господарських будівель і споруд (присадибна ділянка)
$Line=@ReplaceChar (/$Line
$Line=@ReplaceChar )/$Line
@Dialog.Message $Line
Там “косяк” не у форматi запису (так можна i треба поєднувати, щоб зменшити довжину коду i менше перетворювати змiннi, типу Dequote). Ви два рази одну i ту ж дужку ( мiняли на символ / .