Здравствуйте. Дело вот в чем:
Есть xml-файл, в котором необходимо удалять ненужные документы, т.е. пользователь кликает, что ему не нужно, нажимает "Обработать" и в xml-файле выделенные записи удаляются.
Вот, что я хочу сделать:
1. Выбрать xml-файл.
2. Из этого файла выбрать все названия документов и вывести их Чекбоксами в окно программы
3. После нажатия кнопки "Обработать" выбрать отмеченные чекбоксы и удалить блоки <RequestedDoc>... название документа ...</RequestedDoc>
4. Перенумеровать попорядку новый список документов <Position>...</Position>
Всё.
Я смог выполнить только 2 пункта, в третьем пункте у меня проблема - не могу разобраться с массивами. Помогите сделать дальше.
Во вложении файл "001.txt" - это переименованный xml
Также добавил скриншот окна программы.
Есть xml-файл, в котором необходимо удалять ненужные документы, т.е. пользователь кликает, что ему не нужно, нажимает "Обработать" и в xml-файле выделенные записи удаляются.
Вот, что я хочу сделать:
1. Выбрать xml-файл.
2. Из этого файла выбрать все названия документов и вывести их Чекбоксами в окно программы
3. После нажатия кнопки "Обработать" выбрать отмеченные чекбоксы и удалить блоки <RequestedDoc>... название документа ...</RequestedDoc>
4. Перенумеровать попорядку новый список документов <Position>...</Position>
Всё.
Я смог выполнить только 2 пункта, в третьем пункте у меня проблема - не могу разобраться с массивами. Помогите сделать дальше.
Код:
#Region
#AutoIt3Wrapper_Icon=People_001.ico
#EndRegion ; Этот враппер добавит иконку окна в откомпилированный файл, для этого нужно нажать F7 в редакторе
; Подключение модулей
#include <GUIConstantsEx.au3> ; для графического интерфейса
#include <ButtonConstants.au3> ; Для работы с кнопками
#include <File.au3> ; Для работы с файлами и папками
#include <StaticConstants.au3> ; Для стилей вывода текста в окне
#Include <Array.au3> ; Для работы с массивами
; Переменные
$Text_Stroka = 70 ; Начальное значение строки для Чекбоксов
$Text_Height = 23 ; Расстояние между строками
$Title_Name = 'Обработка списка из XML-файла'
Local $File_Input, $Window_X, $Window_Y, $Text_Stroka, $Text_Height ; Обозначение переменных
$File_Input = FileOpenDialog ( 'Выберите XML-файл для обработки', @DesktopDir, 'XML File (*.xml)', 3) ; Выбор файла (и файл и путь к нему должны существовать)
If @error Then ; Если файл не был выбран
Exit ; Выход из программы
EndIf
; Получение текста из файла
$File_XML = FileOpen($File_Input, 0) ; Открытие файла для чтения
$Text_XML = FileRead($File_XML) ; Копирование всего текста из файла для обработки
FileClose($File_Input) ; Закрытие файла
$Text_Document = StringRegExp($Text_XML, '(?s)<cat_ru:PrDocumentName>(.*?)</cat_ru:PrDocumentName>', 3) ; Получение массива - Названия документов
$Text_Kolvo = UBound($Text_Document) ; Количество документов
;_ArrayDisplay($Text_Document) ;отображаем
$Window_X = 650 ; Величина окна по X
$Window_Y = 150 + ($Text_Kolvo-1) * $Text_Height ; Величина окна по Y + количество документов из xml-файла
; Открытие главного окна
$Main_Form = GUICreate($Title_Name, $Window_X, $Window_Y, -1, -1) ; Главное окно в центре экрана с возможностью перетаскивания файлов
GUISetFont(10, 400, 0, 'Microsoft Sans Serif') ; Параметры шрифта - Стандартные
; Рамка - Примечание
$Border_Decription = GUICtrlCreateGroup('Описание', 10, 8, $Window_X-20, 40)
GUICtrlSetFont($Border_Decription, 8, 400, 0, 'Microsoft Sans Serif') ; Параметры шрифта рамки- Уменьшение
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) ; Возможность окрашивать цвет рамки
GUICtrlSetColor($Border_Decription, 0x666666)
$Text_Description = GUICtrlCreateLabel('Выберите пункты, которые необходимо удалить из списка и нажмите кнопку "Обработать".', 20, 22, $Window_X-45, 20) ; Текст описания
; Рамка - Примечание
$Border_Decription = GUICtrlCreateGroup('Список документов', 10, 53, $Window_X-20, $Window_Y-105)
GUICtrlSetFont($Border_Decription, 8, 400, 0, 'Microsoft Sans Serif') ; Параметры шрифта рамки- Уменьшение
DllCall("UxTheme.dll", "int", "SetWindowTheme", "hwnd", GUICtrlGetHandle(-1), "wstr", 0, "wstr", 0) ; Возможность окрашивать цвет рамки
GUICtrlSetColor($Border_Decription, 0x666666)
; Прописывание чекбоксов в главном окне - ЭТО ЯВНО НАДО ПЕРЕДЕЛАТЬ
For $i = 0 To $Text_Kolvo - 1 ; Для каждого из найденных документов в списке
$Check_Doc = GUICtrlCreateCheckbox($Text_Document[$i], 20, $Text_Stroka) ; Сам чекбокс
GUICtrlSetState(-1, $GUI_UNCHECKED) ; Чекбок не отмечен
$Text_Stroka = $Text_Stroka + $Text_Height ; Переход на другую строку в главном окне
Next
; Кнопки
$But_Start = GUICtrlCreateButton('Обработать', $Window_X-220, $Window_Y-40, 100, 30) ; Кнопка - 'Выполнить'
$But_Cancel = GUICtrlCreateButton('Отмена', $Window_X-110, $Window_Y-40, 100, 30) ; Кнопка - 'Отмена'
$But_Exit = GUICtrlCreateButton('Закрыть', 9, $Window_Y-35, $Window_X-19, 25) ; Кнопка - 'Закрыть'
GUICtrlSetState($But_Exit, $GUI_HIDE) ; Скрыть кнопку
GUISetState() ; Сделать окно активным
; Запускается цикл опроса GUI до тех пор пока окно не будет закрыто
While 1
; Проверка нажатий клавиш
Switch GUIGetMsg()
; -------------------------------------------------------------------------------------------------
; Закрытие окна программы
; -------------------------------------------------------------------------------------------------
Case $GUI_EVENT_CLOSE
Exit
; -------------------------------------------------------------------------------------------------
; Кнопка - 'Обработать'
; -------------------------------------------------------------------------------------------------
Case $But_Start
MsgBox (64, '', 'Ok')
; -------------------------------------------------------------------------------------------------
; Кнопка - 'Отмена'
; -------------------------------------------------------------------------------------------------
Case $But_Cancel
Exit ; Выход из программы
; -------------------------------------------------------------------------------------------------
; Кнопка - 'Закрыть'
; -------------------------------------------------------------------------------------------------
Case $But_Exit
Exit ; Выход из программы
EndSwitch
WEnd
; Завершение программы
Exit
Во вложении файл "001.txt" - это переименованный xml
Также добавил скриншот окна программы.