Головна » 2015 » Травень » 26 » Функції скриптів - Операції з картами (файлами) і папками
15:37
Функції скриптів - Операції з картами (файлами) і папками

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


Створення/відкриття карти чи файлу

@FileOpen Name - відкриває файл

@FileOpen c:\моя карта.dmf

@FileNew Name [/Template=Templatename.dmf] - створює нову карту. Шаблон (Template) вказувати не обов'язково.

@FileNew Нова карта /Template=XMLNormal.dmf

@FileNew Нова карта

@Dialog.OpenFile Filter Filename - викликає стандартний діалог відкриття файлу, повертаючи шлях до файлу, але не відкриваючи його. Тобто, застосовується тільки у комплекті із перемінною, у яку, власне, записується цей шлях. Filter - розширення файлу (напр. *.in4,*.xml,*.dmf). Filename - шлях до файлу чи папки по замовчуванню.

$Filename=@Dialog.OpenFile *.xml D:\WORK\
@FileOpen
$Filename

@Map.LoadFromFile Name [Format] - завантажує карту з файлу

Закриття/збереження карти чи файлу

@FileClose - закриває активну карту (якщо карта не збережена, запитує, чи потрібно зберегти).

@FileClose

@CloseMap [MapNumber] - закриває активну карту без запиту про збереження.

@CloseMap 2

@Map.SaveToFile [Name] [Format] - зберігає активну карту у файл із заданим іменем та форматом. Якщо формат не вказаний, то він визначається автоматично по розширенню файлу.

@Map.SaveToFile c:\моя карта.dmf

@Dialog.SaveFile Filter Filename викликає стандартний діалог збереження (створення) файлу, повертаючи певній перемінній шлях до файлу. Тобто, застосовується тільки у комплекті із перемінною, у яку, власне, записується цей шлях. Filter - розширення файлу (напр. *.in4,*.xml,*.dmf). Filename - шлях до файлу чи папки по замовчуванню.

$Filename=@Dialog.SaveFile *.xml D:\WORK\
@Map.SaveToFile
$Filename

@Map.SaveToKMZ FileName [LOD] [LODSettingsName] - зберігає карту в KMZ.  LOD -використовувати рівні деталізації. LOD SetName - ім'я налаштувань LOD

@Map.SaveToTIF DPI PixelFormat(1/8/24) Filename - експортує карту (область задану рамкою) у формат TIFF, BMP, JPG або WMF (по розширенню файлу)

@Map.SetDMFCompression CompressionLevel - встановлює поточний рівень стиснення при збереженні в DMF: 0 - нема стиснення, 1 - швидке і т.д.

@Map.GetDMFCompression - повертає поточний рівень стиснення при збереженні в DMF: 0 - нема стиснення, 1 - швидке і т.д.

@Map.CutMapByFrames FileNameParamNumber AddrParam OutFolder [ShowInfo] - ділить карту на частини і зберігає кожну частину в окремий файл. FileNameParamNumber - ім'я параметра рамок, який містить імена для вихідних файлів. OutFolder - каталог вихідних файлів

Операції з відкритими картами (вкладками)

@ActivateMap Number - активує карту (вкладку) за її порядковим номером, або повертає порядковий номер карти.

@ActivateMap 2

$AM=@ActivateMap
@Dialog.Message
$AM

@GetMapNumber Filename - повертає номер відкритої карти (вкладки) по повній назві її файлу

$MapName=c:\моя карта.dmf
@GetMapNumber
$MapName
@ActivateMap $MapName

@Map.InsertFromFile Filename - виконує команду Вставка/Карта, додаючи на карту об'єкти із зовнішнього файлу

@Map.InsertFrameFromFile Filename - виконує команду Вставка/Рамка і легенда

@MapCount - повертає кількість відкритий карт

Операції з папками

@CleanFolder Folder - видаляє всі файли у вказаній папці

@CleanFolder D:\WORK\xml

@CreateFolder Folder - створює папку із вказаним іменем

@CreateFolder D:\WORK\xml

@FolderExists Path - повертає 1, якщо дана папка існує, і 0 - якщо ні

$Papka=D:\WORK
$Perev=@FolderExists $Papka
@If $Perev=1 then @Dialog.Message Папка вже існує
@If $Perev=0 then @CreateFolder $Papka

@Dialog.SelectFolder TextMessage - викликає діалог вибору папки і записує шлях до неї в перемінну

$Papka=@Dialog.SelectFolder Виберіть папку 
@Dialog.Message Вибрана папка $Papka

 

@ProgramFolder - повертає шлях до папки, де встановлена програма Digitals

$ProgPapka=@ProgramFolder
@Dialog.Message $ProgPapka

@WorkFolder - повертає шлях до робочої папки, яку можна обрати в налаштуваннях Digitals (Сервіс/Налаштування/Загальне/Робоча папка по замовчуванню)

$Work=@WorkFolder
@Dialog.Message $Work

@AddFolderToFilenames Folder - добавляє префікс імені папки до імені файлу (наприклад, \Images\IMG_01.jpg > C:\Images\Images-IMG_01.jpg)

Операції з файлами, які не відкриті в програмі

@CopyFile FileName|NewFilename - копіює файл з папки у папку, при цьому важливо, щоб у кінцевій папці ще не було такого файлу, бо інашке не копіюється.

$FE=@FileExists D:\TEMP\Сканкопії\Зразок.png
@if $FE=1 then @DeleteFile D:\TEMP\Сканкопії\Зразок.png
@CopyFile  D:\TEMP\Сканкопії\Зразок.png|D:\Результат\Зразок.png

@Map.LookForFile Filename - шукає заданий файл у папці з файлами і повертає повний його шлях

@FileExists Filename - повертає 1, якщо даний файл існує і 0 - якщо ні.

$File=c:\моя карта.dmf
$Perev=@FileExists $File
@If $Perev=1 then @Dialog.Message Файл вже існує

@DeleteFile Filename - видаляє даний файл і повертає 0 у випадку успіху

$File=c:\моя карта.dmf
$Perev=@Deletefile $File
@If $Perev=0 then @Dialog.Message Файл $File успішно видалено

@CreateCommonKMZ Folder [ShowInfo] - створює KMZ файл в заданій папці, який містить ярлики на всі файли root.kmz у вкладених папках.

@XML.Valid XMLStringOrFileName - повертає 1, якщо XML-файл чи його символьний рядок валідні

;Перевірка валідності файлу
$FN=@Dialog.OpenFile *.xml
$if $FN= then @Break Не вибраний файл
$R=@XML.Valid $FN
@if $R=1 then @Dialog.Message файл $FN валідний
@if $R=0 then @Dialog.Message файл $FN не валідний

;Перевірка валідності символьного рядка
@Map.DeselectAll
@Map.SelectLayer ID70005
$SO=@Map.SelectedObject
@if $SO=0 then @Break Не знайдена ділянка 
$S=@Map.Object[$SO].Parameter[ID7000500]
@if $S= then @Break Адреса ділянки не заповнена 
$R=@XML.Valid $S
@if $R=0 then @Dialog.Message Адреса ділянки не валідна
@if $R=1 then @Dialog.Message Адреса ділянки валідна

Розбирання імені файлу на частини

@Map.Filename - повертає повне ім'я карти, включаючи шлях і розширення

@Map.ClearFilename - повертає повне ім'я карти, включаючи шлях, але без розширення

@Map.ClearShortFilename - повертає коротке ім'я карти без шляху та розширення

@GetFilePath Filename - витягує шлях із повного імені файлу

@ExtractFilePath Fullname - витягує шлях із повного імені файлу

$D=@Map.Filename
$D=@ExtractFilePath $D
@Run $D

@ExtractFileExt Filename - витягує розширення файлу із його імені

@ExtractFileFolder Filename - витягує ім'я останньої папки із повного імені (шляху)

@ExtractFileName Fullname - витягує ім'я файлу із повного імені (шляху)

@LowCaseFileExtensions Folder - переводить розширення всіх файлів із папки (із вкладеними в неї папками) у нижній регістр (.JPG в .jpg і т.д.)

Приклади

Збереження файлу в XML і перевірка чи такий вже існує.

$FileName=@Map.ClearFilename
$FilePath=@GetFilePath $FileName
$MapName=@Map.ClearShortFilename
$NewName=$FilePath\$MapName.xml
$Zaminyty=@FileExists $NewName
@if $Zaminyty=0 then @Goto %NoFile
$YesFile=@Dialog.Confirm Файл $NewName |вже існує. Замінити?
@If $YesFile=0 then @break
%NoFile
@Map.SaveToFile $NewName
@Dialog.Message Файл збережено в XML як|$NewName

Відкриття усіх файлів XML, що знаходяться у певній папці

$WorkPapka=@Dialog.SelectFolder Виберіть папку з файлами для опрацювання
@if $WorkPapka= then @break
@Text[1].FolderListTree *.xml $WorkPapka
$FC=@Text[1].Count
@if $FC=0 then @break В папці не виявлено жодного обмінного файлу XML
$I=0
%Loop
$I=$I+1
$FN=@Text[1].Line[$I]
@FileOpen $FN
@if $I<$FC then @Goto %Loop

Швидке конвертування відкритої карти в інший формат

Зберігає відкриту карту в інший формат (по вибору: xml, dxf, dwg, in4, shp, mid/mif), закриває поточне вікно і відкриває заново створений файл.

$M=@Map.Modified
@If $M=1 @Break Збережіть поточні зміни
$S=@Map.ClearFilename
$E=@Dialog.Select Зберегти як|xml|dxf|dwg|in4|shp|mif
@If $E= then @Break
$S=$S.$E
@Map.SaveToFile $S
$FE=@FileExists $S
@If $FE=0 @Break
@CloseMap
@FileOpen $S

Примітка: Якщо вам не потрібно закриття поточної карти та відкриття нової, то видаліть чотири останні рядки скрипту після команди @Map.SaveToFile $S. Ви також можете змінити список форматів  в четвертому рядку, залишивши тільки необхідні вам, чи, навпаки, додавши нові.

Конвертування усіх відкритих карт у формат DXF

$C=@MapCount
$I=0
%Start
$I=$I+1
@If $I>$C then @Break
$F=@Map[$I].ClearFilename
@Map[$I].SaveToFile $F.dxf
@Goto %Start

Примітка: Для конвертування в інший формат замініть dxf на потрібне розширення в передостанньому рядку скрипту.

Конвертування усіх файлів в папці у інший формат

Коли карт дуже багато і відкрити їх усі одночасно не виходить, можна використовувати скрипт, який по черзі відкриє всі файли із вказаної папки і збереже їх в інший формат.

$Filter=*.dmf
$F=@Dialog.SelectFolder Вкажіть папку з картами
@Text.FolderList $Filter $F
$C=@Text.Count
@If $C=0 @Break В папці "$F" відсутні файли $Filter
$I=0
%Start
$I=$I+1
@If $I>$C then @Break Зроблено (конвертовано $I файлів)
$F=@Text.Line[$I]
@FileOpen $F
$F=@Map.ClearFilename
@Map.SaveToFile $F.dxf
@CloseMap
@Goto %Start

Примітка: Скрипт шукає і конвертує всі DMF файли у вказаній папці. Якщо вихідні файли в іншому форматі, замініть фільтр в першому рядку скрипту (наприклад $Filter=*.in4 чи $Filter=*.*). Для конвертування не в DXF, а в інший формат, замініть dxf на інше розширення в третьому з кінця рядку скрипту. Якщо потрібно обробити файли не тільки у вказаній папці, але і в усіх її підпапках, то замість функції @Text.FolderList можна використати @Text.FolderListTree.


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

 

Переглядів: 3686 | Додав: Микола | Рейтинг: 5.0/1
Всього коментарів: 6
avatar
6 nesan • 09:19, 21.03.2016
програма від 15.03.2016. запускав на трьох різних комп'ютерах, видає помилку або "Unknown file format" або "У папці відсутні обмінники".
avatar
4 nesan • 17:26, 18.03.2016
Доброго дня,
скопіював скрипт для відкриття усіх XML в одній карті. Вказую папку з файлами і в мене видає помилку: "Unknown file format: D:\XML\0522210100010010719.xml"
підкажіть буль-ласка що не так.
Дякую
avatar
0
5 Микола • 19:42, 18.03.2016
скоріш за все треба оновити програму. Файли хмл у вашій версії взагалі підтримуються? Бо судячи з помилки, не підтримуються. Або ж не підтримується функція, яка формує список файлів. Версія програми повинна бути не раніше 2014 року
avatar
3 sergio2009 • 09:15, 29.12.2015
Дякую!!!! Все працює! Супер!
avatar
1 sergio2009 • 15:18, 25.12.2015
Відкриття усіх файлів XML, що знаходяться у певній папці
Класний скрипт. А як зробити щоб відкривши всі ХМЛ з папки вони перемістились у нове вікно для збереження у фоматі ДМФ (хочу створити базу зроблених ХМЛ)
avatar
0
2 Микола • 16:22, 25.12.2015
$WorkPapka=@Dialog.SelectFolder Виберіть папку з файлами для опрацювання
@if $WorkPapka= then @break
$FC=@Text[1].FolderListTree *.xml $WorkPapka
$MapCount=@MapCount
@if $MapCount=0 then @Break Відкрийте карту (чи створіть нову) для додавання обмінників
@If $FC=0 then @Break У папці відсутні обмінники
$I=1
@Map.BeginUpdate
@Progress.Start $FC Процес створення бази
%Loop
@Progress.StepBy
$rogress=@Progress.Canceled
@if $rogress=1 then @Map.EndUpdate RefreshAlways
@if $rogress=1 then @break Зупинено на файлі $I
$FN=@Text[1].Line[$I]
$FileExist=@FileExists $FN
@If $FileExist=0 then @Goto %LoopNext
@Map.InsertFromFile $FN
%LoopNext
$I=$I+1
@if $I<=$FC then @Goto %Loop
@Progress.Stop
@Map.EndUpdate
@Dialog.Message Виконано! Добавлено $I обмінників
avatar