Головна » 2015 » Травень » 26 » Функції скриптів - Робота з текстом
19:37
Функції скриптів - Робота з текстом

Всі скриптові функції Digitals для зручності можна поділити на категорії, в залежності від того, які операції та над якими об'єктами виконує та чи інша функція. 


Текстові контейнери

  Текстова інформація у скриптах найчастіше обробляється у спеціальних текстових блоках (контейнерах), які виглядають як @Text[N]​Текстові контейнери - це вид скриптових функцій для роботи з текстом, особливістю яких є те, що вони обробляють текст структуровано у вигляді рядків та колонок, як у таблицях Ексель.

  В ці контейнери можна заносити, наприклад, список кадастрових номерів, список землевласників, список файлів, список виділених об'єктів карти, а також звичайний текст.

  Заносити значення в текстові контейнери можна за допомогою змінних (@Text.Text Value чи @Text.Add Value), читаючи з текстових файлів (@Text.Load Filename), і навіть через буфер обміну (@Text.Paste).

  В межах одного скрипту можна використовувати до 63-ох текстових контейнерів, які адресуються як Text[1],Text[2] … Text[63]. Якщо ж в скрипті використовується тільки один текстовий контейнер, то його можна адресувати, як @Text.Text, без вказування індексу.

  Головні складові елементи текстового контейнера - це умовні рядки (Text.Line). Іноді ці рядки ще називають строками.

  Ті чи інші рядки, як окремі елементи текстових контейнерів, можна легко додавати чи видаляти, посилатися на них, шукати їх по змісту тощо. 

@Text[N].Text [Value] - записує та зчитує текст текстового контейнера

@Text.Text Білий Іван Степанович
$mes=@Text.Text
@Dialog.Message $mes

@Text[N].Save Filename – зберігає текст з контейнера в текстовий файл

$TypDoc=Паспорт громадянина України
@Text.Text $TypDoc
@Text.Save D:\Dovidnyk.txt

@Text[N].Load Filename – завантажує текст у контейнер із текстового файлу

@Text.Load D:\Dovidnyk.txt
$mes=@Text.Text
@Dialog.Message $mes


@Text[N].Add Value – додає у текстовий список контейнера новий рядок

$TypDoc=Паспорт громадянина України
@Text.Text $TypDoc
$KymVydDoc=Дрогобицьким РВ УМВС України у Львівській області
@Text.Add $KymVydDoc
$Mes=@Text.Text
@Dialog.Message $Mes
@Text.Save D:\123.txt

Text[N].Line[N] [Value] - зчитує вказаний рядок тексту з контейнера, або замінює його значення на інше, якщо опісля вказане нове значення, при наявності такого номера рядка в контейнері

@Text.Load D:\123.txt
$KymVydDoc=Text.Line[2]
@Dialog.Message $KymVydDoc

@Text[N].Count – зчитує кількість рядків у контейнері

@Text[N].Clear – очищує вміст контейнера, кількість рядків стає дорівнювати

@Text[N].FolderList Mask FolderName - вносить у контейнер список повних назв усіх файлів із вказаної папки, де Mask - розширення файлів (*-усі), FolderName - назва папки.

 

@Text[N].FolderListTree Mask FolderName - вносить у контейнер список повних назв усіх файлів із вказаної папки, а також з усіх папок, що вкладені в неї.

@Text[1].FolderListTree *.xml D:\WORK
$FC=@Text[1].Count
$I=0
%Loop

$I=$I+1
$FN=@Text[1].Line[
$I]
@FileOpen
$FN
@if $I<$FC then @Goto %Loop

@Text[N].Copy - копіює текст з контейнера в буфер обміну

@Text[N].Paste - вставляє текст з буфера обміну в контейнер

@Text[N].IndexOf FindStr - шукає в контейнері заданий текст і виводить номер рядка, в якому він знаходиться або 0 при його відсутності.

@Text[N].Delete N1-N2 - видаляє з контейнера рядки із номерами від N1 до N2

@Text[N].NumericSort [+/-] - сортує рядки у контейнері за порядком (по алфавіту)

@Text[N].Columns ColumnIndex1 ColumnIndex2 ... - залишає в текстовому контейнері тільки задані колонки, видаляючи всі решту

@Text[N].KeyValue FindStr - шукає значення FindStr в першій колонці таблиці і повертає значення з другої і всіх решти колонок

@Text[N].Value Key - повертає значення за ключем Key із списку, який виглядає як Ключ=Значение

@Text[N].Prefix Value - додає текст (Value) на початок кожного з рядків

@Text[N].Suffix Value - додає текст (Value) в кінець кожного з рядків

@Text[N].Trim - видаляє пробіли на початку і в кінці кожного з рядків

@Text[N].RemoveChar Char - видаляє символ Char із усіх рядків

@Text[N].Reverse - змінює порядок рядків на протилежний

@Text[N].Leading Char - доповнює всі рядки контейнера символом Char до заданої довжини, наприклад, роблячи в числах однакову кількість цифр після коми (якщо Char вказано як 0)

@Text[N].Clip Char - видаляє в кожному рядку всі символи зліва (починаючи з першого) до символу Char включно (якщо є декілька таких в рядку - до останнього)

@Text[N].LengthFilter Condition - видаляє рядки за їх довжиною, наприклад Text[N].Filter <1 видалить всі пусті рядки; доступні значення >,<,=,<>

@Text[N].Merge Text[Index] - додає в текстовий контейнер N елементи (рядки) із текстового контейнера Index

@Text[N].Append Text[Index] - додає вказані (Index) рядки в кінець текстового контейнера N

@Text[N].Assign Text[Index] - присвоює значення текстового контейнера Index текстовому контейнеру N

@Text[N].Intersect Text[Index] - видаляє з текстового контейнера N рядки, які відсутні в текстовому контейнері Index

@Text[N].Subtract Text[Index] - видаляє з текствого контейнера N рядки, які є в текстовому контейнері Index

@Text[N].Trunc Char - видаляє весь текст, починаючи з символу Char

@Text[N].Unique [Length] - Обрізає рядки по заданій довжині, залишаючи тільки унікальні

@Text[N].Crop Start Count - замінює кожен рядок на його фрагмент, який починається з символу Start і має довжину Count

@Text[N].Histogram [Start Count] - рахує кількість входжень кожного фрагменту рядка в текстовому контейнері

@Text[N].Split LineCount Filename - зберігає частини текстового контейнера в окремі файли по LineCount елементів (рядків)

@Text[N].GroupFilter GroupLength - залишає тільки перше значення в кожній групі, що обмежена довжиною GroupLength

@Text[N].ExtractCadnumbers Text - знаходить в текстовому контейнері список кадастрових номерів вигляду XXXXXXXXXX:XX:XXX:XXXX

@Text[N].LeaveUnusual - залишає незвичайний текст

@Text[N].RegExMatches Mask - повертає всі співпадіння тексту з маскою регулярного виразу

@Text[N].RemoveEmptyValues - видаляє рядки з пустим значенням вигляду Key=

@Text[N].RemoveOldFiles - видаляє із списку однакові файли з однаковою короткою назвою

@Text[N].DelimitedText  [String] - виклик функції без аргумента повертає вміст контейнера, аналогічно функції @Text[N].Text але розділовий символ умовних рядків за замовчуванням не знак переносу, а кома чи інший заданий наступною функцією (див.нижче). Виклик функції з аргументом змінює вміст контейнера, розбиваючи на рядки по новому розділовому символу та повертає кількість нову кількість рядків в контейнері.

$S=кукурудза,кукумбер,морква,цибуля
$Count=@Text[1].DelimitedText $S
@Dialog.Message $Count
$Tab=@Calc char(9)
$Tab=@DequoteText $Tab
@Text[1].Delimiter $Tab
$TabedText=@Text[1].DelimitedText
@Dialog.Message $TabedText

@Text[N].Delimiter [Char] - задає або повертає символ-розділювач в текстовому контейнері

@Text[N].Parse - парсить текст в форматі JSON

@Text[N].ExplodeLine[N] var1,var2,...

 

@Map.Object[N].TableText [NewText] - читає чи записує вміст таблиці (об'єкта N) на карті

$Value=@Map.Object[4].TableText
@Text.Text $Value

Читайте також про використання текстових контейнерів (@Text) для редагування таблиць

 

Функції @Calc

@Calc Length("s") – визначає довжину тексту.

$H=геодезія
$L=@Calc Length("$H")
@Dialog.Message $L
;в результаті отримаємо 9 (кількість букв у слові "геодезія")


@Calc Pos("t","s") – визначає позицію частини тексту t в тексті s.

$H=геодезія
$A=о
$L=@Calc Pos("$A","$H")
@Dialog.Message $L
;в результаті отримаємо 3 (номер за порядком букви "о" у слові)


@Calc Trim("s") – видаляє пробіли на початку і в кінці тексту s
@Calc TrimLeft("s") – видаляє пробіли на початку тексту s
@Calc TrimRight("s") – видаляє пробіли в кінці тексту s
@Calc Upper("s") – переводить усі символи у верхній регістр

$H=Геодезія
$L=@Calc Upper("$H")
@Dialog.Message $L
;в результаті отримаємо "ГЕОДЕЗІЯ"


@Calc Lower("s") – переводить усі символи у нижній регістр
@Calc Copy("s","x",["y"]) – копіює частину тексту s (число символів y, починаючи з символа x).

$H=4621283300
$L=@Calc Copy("$H","1","8")
@Dialog.Message $L
;в результаті отримаємо "46212833" (8 символів, починаючи з 1-го)


@Calc Delete("s","x",["y"]) – видаляє частину тексту s (число символів y, починаючи з символа x).
@Calc Insert("s","t","x") – вставляє частину тексту t в текст s в позицію x.

$H=4621200
$P=833
$L=@Calc Insert("$H","$P","6")
@Dialog.Message $L
;в результаті отримаємо "4621283300"


@Calc Replace("s","t","v",[1/0=ReplaceAll,[1/0=IgnoreCase]] ) – в тексті s знаходить частину тексту t і замінює його на текст v.

$H=4621283300
$P=833
$L=@Calc Replace("$H","$P","555")
@Dialog.Message $L
;в результаті отримаємо "4621255500"

;заміна в координатах коми на крапку
$X=@Calc replace("$X",",",".")
$X=@DequoteText $X
$Y=@Calc replace("$Y",",",".")
$Y=@DequoteText $Y

1/0=ReplaceAll означає, що якщо вибрано 1 (@Calc Replace("s","t","v",1,1 ), то будуть замінені всі значення, якщо 0 - то тільки перше

1/0=IgnoreCase означає, що якщо вибрано 1 (@Calc Replace("s","t","v",1,1 ), то замінені будуть всі значення, не залежно від того, ВЕЛИКИМИ літерами вони чи малими, якщо 0 - то тільки у відповідності


@Calc char(s) - повертає символ ASCII, відповідний вказаному числовому коду

;пробіл:
$Space=@Calc char(32)

;знак табуляції:
$Tab=@Calc char(9)

;вертикальний слеш:
$VBar=@Calc Char(124)

@Calc Ascii(s) - протилежна функції @Calc char

@Calc trunc - повертає цілочисельну частину числа з плаваючою комою. Тобто, обрізає дробову частину числа.

;заокруглення числа до двох знаків після коми
$Dn=5447835.727
$Dn=@Calc trunc(100*$Dn+0.5)/100
@Dialog.Message $Dn1

Інші доступні операції Calc:
Math functions:
Abs(x), Frac(x), Trunc(x), Heaviside(x) or H(x), Sign(x), Sqrt(x), Ln(x), Exp(x), Cos(x), CTg(x), Ch(x), CTh(x), Sin(x), Sh(x), Tg(x), Th(x), ArcSin(x), ArcCos(x), ArcTg(x), ArcCtg(x)

@DequoteText - видаляє лапки. Застосовується після функцій @Calc, оскільки їх результатом часто є значення в лапках 

$H=4621283300
$P=833
$L=@Calc Replace("$H","$P","555")
$L=@DequoteText $L
@Dialog.Message $L
;в результаті отримаємо 4621255500

Об'єднання та роз'єднання

@Concat Str - об'єднує частини тексту, які розділені комами в один текст

@Concat 1,2,3,4,5,6,7,8,9,0

@StringPart NumberCharString - витягує частину тексту між певними символами
Number - номер частини тексту
Char - символ, по якому шукати частину
String - власне текст

;витягуємо з тексту, що розділений комами назву нас.пункту, вулицю та будинок
$Text=804,82457,Львівська,Дрогобицький,с.Добрівляни,вул.Шкільна,130,-,25
$P1=@StringPart 5,$Text
$P2=@StringPart 6,$Text
$P3=@StringPart 7,$Text
$Res=$P1,$P2,$P3
@Dialog.Message $Res

;об'єднуємо значення кадастрового номера в рядок без двокрапок
$KN=4621283300:01:001:0001
$KN1=@StringPart 1:$KN
$KN2=@StringPart 2:$KN
$KN3=@StringPart 3:$KN
$KN4=@StringPart 4:$KN
$KN="$KN1$KN2$KN3$KN4"
$KN=@DequoteText $KN
@Dialog.Message $KN

@StringPartCount Char String - повертає кількість частин тексту, розділених символом Char

;рахуємо, скільки частин між комами в даному тексті
$Text=804,82457,Львівська,Дрогобицький,с.Добрівляни,вул.Шкільна,130,-,25
$PartCount=@StringPartCount , $Text
@Dialog.Message 
$PartCount

@StringCopy Index Count String - копіює Count символів тексту String, починаючи з символу Index

@StringDelete Index Count String - видаля Count символів з тексту String, починаючи з символу Index

@StringInsert SubStr|Index|String - вставляє текст SubStr в позицію Index тексту String

@StringLength String - повертає число символів в тексті String

@StringPos SubStr|String - повертає позицію частини тексту SubStr в тексті String

@StringReplace Old|New|String - замінює частину тексту на новий в тексті String

@StringField Number String - витягує частину тексту, що розділений символом табуляції

@StringFieldCount String - повертає кількість частин тексту, що розділені символом табуляції

Конвертація букв та цифр

@Transliterate - виконує транслітерацію кириличного тексту латиницею

@UpcaseSurname Surname Name SecondName - переводить першу букву прізвища, імені та по-батькові у великий регістр

@ReplaceComma - замінює кому на крапку

@ReplaceDot - заміню крапку на кому

@ArabicToRoman Number - конвертує арабські цифри в римські

@RomanToArabic Number - конвертує римські цифри в арабські

@IsUpCase Text - повертає 1, якщо перша буква в даному тексті велика

@IsUpperCase Text - повертає 1, якщо всі букви в даному тексті великі

@LowerCase Text - робить всі букви тексту малими

@UpperCase Text - робить всі букви тексту великими

@StringToUTF8 Text - конвертує текстовий рядок ANSI в кодування UTF-8

@UTF8ToString Text - конвертує текстовий рядок з кодування UTF-8 в ANSI

@UTF8ToURL Text - конвертує текст UTF-8 у URL Encoding виду %20%D0%97

@RoundTo Number Precision - округляє задане число до заданої точності (вказаного числа знаків після коми)

@ReplaceChar OldCharNewCharString - робить заміну символу OldChar на NewChar у символьному рядку чи перемінній String. Всі три параметри подаються вкупі, без пробілів.

@Map.ReplaceTableVariables - сканує текст таблиць і замінює змінні їх значеннями

@Text[N].DecimalToAngle - перетвоює широту/довготу із десяткового вигляду у кутовий

@AngleToDecimal Value [Format] - переводить кутове значення (00°00'00") в десяткове (0.000)

@DecimalToAngle Value [Format] - переводить десяткове значення (0.000) в кутове (00°00'00")

@Not 0/1 > 1/0 - замінює 0 на 1, а 1 на 0

@AdjustCadastralNumber CadNum - додає двокрапки в кадастровий номер

@FromXMLDate yyyy-mm-dd - конвертує дату формату yyyy-mm-dd у дату формату dd.mm.yyyy

@ToXMLDate dd.mm.yyyy- конвертує дату формату dd.mm.yyyy у дату формату yyyy-mm-dd

@MoneyInWriting MoneyValue - сума прописом

Інші маніпуляції

@Float Formula - повертає числовий результат виразу

@CalculateFormula Formula - виконує математичні обрахунки

@Money Formula - виконує математичні обрахунку за формулою з округленням результату до двох знаків

@RoundMoney Formula - виконує математичні обрахунки за формулою з округленням кожного значення до двох знаків після коми

@IsFloat Text - повертає 1, якщо текст містить тільки цифри і знаки +-,.

@IsInteger Text - повертає 1, якщо текст містить тільки цифри і знаки +-

@Assign - присвоює змінній значення текстового рядка без спроби вирахувати вирази

@StringCalc Text function - виконує текстову функцію, наприклад, Copy

Особливі функції

@Random [Range] - повертає випадкове число від 0 до Range. Якщо Range не задано - то випадково повертає 0 або 1

@ToDate DateString - повертає числове значення дати по її символьному значенню, або поточну дату

@NextPeriodicDate PrevDate NumberOfMonths - вираховує наступну дату періодничного платежу

@Map.CreateExplication - створює експлікацію угідь

@Map.PrepareForestTable ObjNumber - готує текст таблиці промірів лісного виділу

@Map.FromPLG - зберігає інформацію про пікети в польський текстовий формат (PLG, що схожий на DAT-файл)

@NGOIndex NGOYear [NowYear] - розраховує коефцієнт індексації нормативної грошової оцінки з року оцінки по поточний

@Map.ArrangeFixedValues - ?

Приклади

 

Приклад 1 - заміна римської цифри на арабську

@Map.DeselectAll
@Map.SelectLayer ID20000
$PZ=@Map.Selected.GetParameter PZ
$New=@Calc Replace("$PZ","XXII","22",1,0)
$New=@DequoteText $New

Приклад 2 - Витягуємо код і назву угіддя

перед запуском скрипту потрібно виділити XML Угіддя


;записуємо в перемінну номер виділеного об'єкта
$I=@Map.SelectedObject
;записуємо в перемінну значення параметра "Код угіддя" нашого об'єкта
$Land=@Map.Object[$I].Parameter[ID7000901]
;витягуємо із перемінної власне код (6 цифр, починаючи з першої)
$LandCode=@Calc Copy("$Land",1,6)
;видаляємо лапки
$LandCode=@DequoteText $LandCode
;витягуємо із перемінної назву угіддя без коду (1000 символів, починаючи із 8-го)
$LandName=@Calc Copy("$Land",8,1000)
;видаляємо лапки
$LandName=@DequoteText $LandName
;виводимо повідомлення з результатом
@Dialog.Message Код угіддя - $LandCode, назва угіддя - $LandName

Приклад 3 - Скрипт, який миттєво знаходить потрібний файл XML в базі з десятки тисяч обмінників

Спершу складаємо список всіх обмінників з потрібної папки, записуючи в текстовий файл D:\Baza.txt

;створюємо діалог вибору папки з обмінниками
$WorkPapka=@Dialog.SelectFolder Виберіть папку з файлами для опрацювання
;якщо папка відсутня, зупиняємо процедуру
@if $WorkPapka= then @break
;заповнюємо список повними іменами файлів із вказаної папки
@Text.FolderListTree *.xml $WorkPapka
;визначаємо, скільки в списку обмінників (рядків)
$FC=@Text[1].Count
;зберігаємо список у файл
@Text.Save D:\Baza.txt
;виводимо вікно з повідомленням про результат
@Break Оброблено $FC обмінників


Переводимо нашу базу в скорочений варіант, залишаючи тільки назву файлу, без його шляху.

;відкриваємо наш список файлів
@Text[1].Load D:\Baza.txt
;дістаємо загальну кількість рядків
$FC=@Text[1].Count
;присвоюємо перемінній, від якої будемо рахувати значення "0"
$I=0
;починаємо цикл по усіх рядках списку
%Loop
;отримуємо номер рядка (для першого 1=0+1, для другого 2=1+1 і т.д.)
$I=$I+1
;записуємо в перемінну значення знайденого рядка
$FN=@Text[1].Line[$I]
;Видобуваємо ім'я файла із повно імені (C:\Images\IMG_01.jpg -> IMG_01.jpg)
$FNShort=@ExtractFileName $FN
;добавляємо результат як рядок в другий текстовий список
@Text[2].Add $FNShort
;повертаємося на початок циклу, якщо номер рядка менший за загальну кількість рядків
@if $I<$FC then @Goto %Loop
;зберігаємо результат у текстовий файл
@Text[2].Save D:\BazaShort.txt
;запускається вікно з результатом про виконання
@Dialog.Message Виконано!


І створюємо кнопку, власне, для швидкого пошуку обмінників в базі і їх відкриття. 
 

;відкриваємо список повних імен (шлях+назва файлу)
@Text[2].Load D:\Baza.txt
;відкриваємо скорочений список
@Text[1].Load D:\BazaShort.txt
;виводимо вікно, де потрібно ввести назву файла, який треба знайти
$KN=@Dialog.Ask Кадастровый номер для пошуку в базі Default=4621283300020010000
;шукаємо назву файла у скороченому списку і заносимо в перемінну номер знайденого рядка
$SeartIndex=@Text[1].IndexOf $KN.xml
;якщо такий рядок не знайдено, виводимо повідомлення
@if $SeartIndex=0 then @Dialog.Message Такого файла in4 в базі нема
;якщо такий рядок не знайдено, переходимо до позначки %Next
@if $SeartIndex=0 then @Goto %Next
;записуємо в перемінну вміст рядка під знайденим номером, але з повного списку файлів
$Seart=@Text[2].Line[$SeartIndex]
;відкриваємо знайдений файл
@FileOpen $Seart
%Next


Тобто, першими двома кнопками ми створюємо та індексуємо базу. А для пошуку користуємося тільки третьою кнопкою.

Приклад 4 - Скрипт, який додає на карту всі файли DMF із вказаної папки

У рядку @SendChars 123<CR> замість 123 потрібно вказати пароль карт, якщо карти мають паролі.

 

$WorkPapka=@Dialog.SelectFolder Виберіть папку з файлами для опрацювання і почекайте на результат (це може зайняти деякий час)
@if $WorkPapka= then @break
@Text[1].FolderListTree *.dmf $WorkPapka
$T1=@Text[1].Text
$FC=@Text[1].Count
@If $FC=0 then @Break В папці не знайдено жодного файла
$I=0
@Map.BeginUpdate
@Progress.Start $FC Додаю файли
%Loop
@SendChars 123<CR>
$Prog=@Progress.StepBy
@if $Prog=0 then @Break
$I=$I+1
$FN=@Text[1].Line[$I]
@Map.InsertFromFile $FN
@if $I<$FC then @Goto %Loop
@Progress.Stop
@Map.EndUpdate


Примітка: жирним шрифтом (напр.@ActivateMap) виділена назва функції, похилим шрифтом (напр.Number) перемінна функції, у квадратних скобках (напр.[MapNumber]) необов'язкова перемінна, яку можна не вказувати.

Переглядів: 7471 | Додав: Микола | Рейтинг: 5.0/2
Всього коментарів: 28
avatar
27 anecrasch • 13:59, 05.02.2024
Доброго дня, знайшов таку інформацію, що якоби Діджиталс знає тільки 3 відмінки (Називний =FIO, Родовий =FIR та Давальний =FID). А значення слова "у/в/на селі" відноситься до Місцевого відмінку. Можете підказати, чи можливо якось провідміняти адресу так, щоб по тексту документації зчитувало + конвертувало + видавало значення " в селі, в селищі, в місті"
avatar
0
28 Микола • 19:44, 07.02.2024
Добрий день! Програма підтримує і інші відмінки, але в папку Digitals для цього треба закинути спеціальні довідники за аналогією з довідником Rod.txt. Десь на форумі "Аналітика", пригадую, хтось викладав такі колись.
Та у вашому випадку, коли потрібно видозмінити тільки три типи населених пунктів, простіше скриптом прописати щось типу цього:
@if $AD=місто then $Typ=в місті
@if $AD=село then $Typ=в селі
@if $AD=селище then $Typ=в селі
@if $AD=смт then $Typ=в селищі
avatar
0
26 Микола • 17:47, 16.05.2023
На сайт додано опис українською мовою 70 нових скриптових функцій, які появилися в програмі Digitals за один рік від 26.04.2022 до 16.05.2023 року. Їх внесено в кожну з відповідних категорій розділу Скриптові функції. Детальніше див. ТУТ
avatar
23 ivanyuk6879 • 14:37, 23.01.2023
Добрий день, не можу знайти потрібну функію. Потрібно перетворити з 
ПЕТРОВ ПЕТРО ПЕТРОВИЧ ------> Петров Петро Петрович
avatar
0
24 Микола • 11:36, 24.01.2023
Добрий день! Це можна зробити окремим скриптом
(перед запуском скопіюйте текст в буфер обміну):
@Text[1].Paste
$Text=@Text[1].Text
$Text=@LowerCase $Text
$I=0
$WCRes=
$WC=@StringPartCount   $Text
%Start
$I=$I+1
@if $I>$WC then @Goto %Finish
$W=@StringPart $I $Text
$L=@Calc Copy("$W","1","1")
$L=@DequoteText $L
$LU=@UpperCase $L
$W=@Calc replace("$W","$L","$LU",0,0)
$W=@DequoteText $W
$WCRes=@Concat $WCRes, ,$W
@Goto %Start
%Finish
$WCRes=@Calc Trim("$WCRes")
$WCRes=@DequoteText $WCRes
@Text[1].Text $WCRes
@Text[1].Copy
@Dialog.Message Результат скопійовано в буфер обміну:||$WCRes
avatar
25 ivanyuk6879 • 11:46, 24.01.2023
Дякую! 
@LowerCase Text, @UpperCase Text є, а цієї функції місцями не вистачає.
avatar
0
22 Микола • 18:31, 26.04.2022
На сайт додано опис українською мовою 110 нових скриптових функцій, які появилися в програмі Digitals з грудня 2020 року (саме тоді на сайті були внесені останні зміни в описі скриптових функцій). Їх внесено в кожний з відповідних розділів. А самі розділи більш грамотно, логічно структуровано і до окремих з них додані пояснювальні описи (див. напр. розділ. ПАРАМЕТРИ). Загалом це такі нові функції - див. ТУТ
avatar
20 SerjN • 16:20, 12.12.2021
Микола, підкажіть, будь ласка, у чому тут проблема...
Спробував вирахувати тригонометричні функції і отримав щось зовсім не те

$Kut=45
$x=@Calc Cos($Kut)
$y=@Calc Sin($Kut)
@Dialog.Message $x $y

замість $x=0.707.. $y=0.707.. видає $x=0.525.. $y=0.8509...
при куті=90 видає: $x=-0.448... $y=0.8939.. замість $x=0 $y=1

Що тут не так?
avatar
0
21 Микола • 17:05, 12.12.2021
див. тут
avatar
16 mrskorobagatyj • 16:43, 23.11.2021
Додайте будь ласко нові функції та приклади до них.
avatar
0
17 Микола • 18:55, 23.11.2021
Ці численні нові функції для обробки тексту є досить специфічними і я особисто не знайшов в них якоїсь реальної користі. Бо практично кожну з цих функцій можна замінити іншими через цикли. Тому я їх проігнорував, бо не маю достатньо часу, щоб інвентаризувати зараз усі нові функції скриптів. Колись пізніше це зроблю. Але про них можете знайти на форумі Геосистема. Я запитував про них в Діми Золотаря. Він розписав був, яка функція для чого призначена. Дивіться ТУТ
avatar
18 mrskorobagatyj • 22:35, 23.11.2021
@Text[N].Leading Char, цю функію можно використати для площі, наприклад якщо площа=0,2310 чи 2,0000
avatar
0
19 Микола • 00:33, 24.11.2021
для цього є функція @RoundTo Number Precision - округляє задане число до заданої точності (вказаного числа знаків після коми)
avatar
13 mrsiromanets • 18:46, 22.11.2021
Як знову підписатись на розсилку на емейл? а то я випадково понакляцував
avatar
0
14 Микола • 20:29, 22.11.2021
Внизу у формі коментарів є кнопка

Щоб кнопка стала активною, оновіть сторінку після того, як відписалися.
avatar
15 Анонімно • 20:41, 22.11.2021
Дякую
avatar
11 mrsiromanets • 19:30, 17.11.2021
Доброго дня. Підкажіть будь ласка чи є така функція щоб змінити розмір підписів на карті, не окремо одного а відразу всіх (в мене їх 300 штук, по одній довго міняти)
avatar
-1
12 Микола • 15:26, 18.11.2021
Добрий день. Якщо усі підписи в одному параметрі - то змініть просто розмір шрифту в цьому параметрі.
avatar
9 Анонімно • 15:51, 19.10.2021
Добрый день, подскажите пожалуйста чи возможно все помеченные объекты карты занести в список, после чего обращаться к каждому (по порядку списка)
avatar
1
10 Микола • 20:38, 19.10.2021
Прономеруйте усі об'єкти в якомусь з параметрів на закладці Інфо, а потім через Правка - Знайти отримаєте виділення потрібного. Це буде зручніше. Скриптом в даному випадку не буде дуже практично. Особливо, коли в карту будуть вноситися зміни. В скрипті для кнопки можна просто прописати команду для швидкого виклику або вікна для пошуку, або команди Вибрати | Шари...
avatar
7 SerjN • 02:02, 12.02.2021
Доброго дня.
При створенні скриптів стикаюсь з такою проблемою - не працює порівняння строкових змінних у функції @if. Наприклад: @if $K= then ... або  @if $K<> then ... або
@if $K=$N then ... та тому подібне.
Останній приклад - хотів по кадастровому номеру шукати додаткову інформацію у текстовому файлі (де він стоїть першим в строчці) і вставляти її в документ, але із-за того що порівняння не спрацювало - нічого не вийшло.

$KadNomer=@Map.Object[$NO].CalculateFormula Parent...........
$Spisok=@Text.Load Lists\111.txt
$KS=@Text.Count
$i=0
%Start
$i=$i+1
@if $i>$KS @Goto %Fin
$Stroka=@Text.Line[$i]
$KND=@StringPart 1$Tab$Stroka
@Dialog.Message ---$KND---$KadNomer---
@if $KND<>$KadNomer then @Goto %Start
$F=@StringPart 6$Tab$Stroka
$B=@StringPart 7$Tab$Stroka
$BS=@StringPart 8$Tab$Strok
%Fin

Пробував і такий варіант циклу:
@if $KND=$KadNomer then @Goto %Fin1
@Goto %Start
%Fin1
$F=@StringPart 6$Tab$Stroka
$B=@StringPart 7$Tab$Stroka
$BS=@StringPart 8$Tab$Strok
%Fin
отримав теж саме - кадастрові номери не порівнюються і скрипт іде далі на нижню строку
Ввів діалог для виявлення зайвих символів - зайвих не показало
---7125183200:02:000:0291---7125183200:02:000:0291---
Підкажіть у чому тут може бути причина?
avatar
0
8 Микола • 12:30, 12.02.2021
Доброго дня!
Беріть в лапки порівняльні елементи:
@if "$KND"<>"$KadNomer" then ...
Інакше скрипт обрізає цифру до перших двокрапок у ній.
avatar
1 mrskorobagatyj • 11:35, 01.06.2020
Доброго дня. Підкажіть як витягнути номер рядка з текстового файлу як що в рядку є пробіл або знак табуляції. Наприклад 2312500000|tab|71501. Хочу витягти номер рядка по кадастровому номеру щоб потім с цього рядка через StringPart2 витягти індекс. Так можливо? чи требо іншим шляхом робити?
$Zon=@Map.Layers.ObjectCount ID70003
@If $Zon=0 then @Break
$Zona=@Map.Object[$Zon].CalculateFormula Parent[ID7000301](ID70003)
$Zona=@Calc copy("$Zona",1,10)
$Zona=@DequoteText $Zona
@Text[1].Load C:\Digitals\Lists\Postal_codes\Index.txt
$F=@Text[1].IndexOf $Zona
avatar
0
2 Микола • 19:44, 01.06.2020
замість останнього рядка у вас напишіть:
$F=@Text[1].KeyValue $Zona
avatar
3 mrskorobagatyj • 10:09, 02.06.2020
Дякую за відповідь саме те що треба.
Підкажіть ще, як що починається з букв наприклад Енергодар|tab|71501, як отримати той же результат що з коатuu
avatar
0
4 Микола • 11:45, 02.06.2020
Та так само, просто замість перемінної $Zona вам потрібно перемінну, яка буде містити ваші назви (Енергодар і інші). Тобто, вам замість коду, який витягує з обмінника КОАТУУ треба код, який буде витягувати назву і записувати у цю перемінну.
avatar
5 mrskorobagatyj • 13:46, 02.06.2020
Щось ні як не підтягує може щось не так.
@Map.SelectLayer ID70005
$Parcel=@Map.SelectedObject
$Ow=@Map.Object[$Parcel].Parameter[ID7000520]
$Pr=ProprietorInfo/Authentication/NaturalPerson/Address
$SM=@XML.XPath $Pr/Settlement $Ow
$SM=@StringPart 2 $SM
@Text[1].Load C:\Digitals\Lists\Postal_codes\Index.txt
$Res=@Text[1].KeyValue $SM
@Dialog.Message $Res
А з коату все добре
avatar
0
6 Микола • 19:39, 02.06.2020
Для чого рядок $SM=@StringPart 2 $SM ?
Ви що назву населеного пункту пишете повними словами: місто, село, седище міського типу?
Назва населеного пункту пишеться скорочено. Тому роздільником є крапка, а не пробіл.
Та найкраще у файлі пистати повністю м.Енергодар|tab|71501
бо інколи після м. є ще пробіли, а інколи нема.
Інколи назва населеного пункту може бути з декількох слів, а вам так витягне тільки перше.
Якщо смт - то також ще один варіант буде - без крапки. А якщо написано повністю - то це три слова аж.
avatar