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

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


Текстові списки

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

Особливістю текстового списку  @Text[N]​  є те, що він, без допомоги перемінних, може зберігати в собі текстове значення

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

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

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

 

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

@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] - посилається на певний рядок у списку

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

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

@Text[N].FolderList 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 [+/-] - сортує список числових значень списку по зростанню чи по зменшенню

@Map.Object[N].TableText [NewText] - читає чи записує вміст таблиці

Приклади

Скрипт, який миттєво знаходить потрібний файл 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


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

Скрипт, який додає на карту всі файли 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]) необов'язкова перемінна, яку можна не вказувати.

Переглядів: 2395 | Додав: Микола | Рейтинг: 5.0/2
Всього коментарів: 0
avatar