Версия AutoIt: 3.3.0.0
Описание: Нужен инструмент для переименования переменных и функций.
Эта задача возможно будет интересна для создателей скриптов.
Цель скрипта:
1. Просмотр существующих переменных и функций
2. Переименование с целью улучшения читаемости скрипта или сокращения количества символов в переменной до одного для компакности скрипта.
3. Переименование связанное с обьединением скриптов, проверка, что переменные в скриптах не пересекаются и часть кода можно добавлять из одного скрипта в другой.
Примечания:
С темой получения списка функций ознакомился, а до этого сам попробовал получить список:
Немогу найти ссылку на тему с поддержкой редактирования итемов GUICtrlCreateListView, если это всё объединить то скрипт создать возможно.
Описание: Нужен инструмент для переименования переменных и функций.
Эта задача возможно будет интересна для создателей скриптов.
Цель скрипта:
1. Просмотр существующих переменных и функций
2. Переименование с целью улучшения читаемости скрипта или сокращения количества символов в переменной до одного для компакности скрипта.
3. Переименование связанное с обьединением скриптов, проверка, что переменные в скриптах не пересекаются и часть кода можно добавлять из одного скрипта в другой.
Примечания:
С темой получения списка функций ознакомился, а до этого сам попробовал получить список:
Код:
; @AZJIO
;скрипт предназначен для просмотра переменных и функций в скриптах на предмет пересечения, для возможности безбоязненно копировать часть кода одного скрипта в другой. Также позволяет визуально отследить что при выполнении замены имени переменной не произойдёт порча близкой по имени переменной, например $Path и $PathName. При замене $Path испортится $PathName, поэтому можно временно переименовать сначала $PathName, а потом $Path и далее восстановить $PathName. Переменные читаются из скрипта в одном экзэмпляре. Окно поддерживает drag-and-drop, и изменение размера окна.Счётчик времени показывает время обработки для таких библиотек вункций как WinAPIEx.au3, GDIP.au3.
#Include<Array.au3>
$bufer_read = 0 ; если 1 то читаем из буфера, если 0 то диалог выбора файла
$bufer_write = 1 ; если 1 то результат в буфер, если 0 то сохраняем в файл file_0.au3 в каталоге конвертора
Global $kol, $text01, $text02, $text0, $text, $Info_Edit1, $Info_Edit2, $Time, $timer
If $CmdLine[0]=0 Then
If $bufer_read = 1 Then
$text = ClipGet()
Else
$Path = FileOpenDialog("Выбор файла.", @WorkingDir & "", "Скрипт (*.au3)", 1 + 4)
$file = FileOpen($Path, 0)
$text = FileRead($file)
FileClose($file)
EndIf
Else
If FileExists($CmdLine[1]) Then
$file = FileOpen($CmdLine[1], 0)
$text = FileRead($file)
FileClose($file)
EndIf
EndIf
_ReadAU3($text)
If $kol = 0 Then
MsgBox(0, "Сообщение", 'Нет переменных')
Exit
EndIf
If $kol < 20 Then
$pos = $kol
Else
$pos = 20
EndIf
$Main_Gui = GUICreate("Переменные и функции", 390, $pos * 17 + 120, -1, -1, 786432, 0x00000010)
$CatchDrop = GUICtrlCreateLabel("", 0, 0, 390, $pos * 17 + 120)
GUICtrlSetState(-1, 128 + 8)
$Info_Edit1 = GUICtrlCreateEdit($text01, 8, 10, 180, $pos * 17 + 40)
GUICtrlSetResizing(-1, 1)
$Info_Edit2 = GUICtrlCreateEdit($text02, 198, 10, 180, $pos * 17 + 40)
GUICtrlSetResizing(-1, 1)
$Time = GUICtrlCreateLabel('', 8, $pos * 17 + 60, 120, 17)
GUICtrlSetResizing(-1, 1)
GUICtrlSetData($Time, 'Выполнено за '&Round($timer/1000, 1)&' сек')
GUICtrlCreateLabel('Используйте drag-and-drop', 138, $pos * 17 + 60, 190, 17)
GUICtrlSetResizing(-1, 1)
GUISetState()
Send('^{HOME}')
While 1
Sleep(10)
$msg = GUIGetMsg()
Select
Case $msg = -13
$file = FileOpen(@GUI_DragFile, 0)
$text = FileRead($file)
FileClose($file)
_ReadAU3($text)
Case $msg = -3
Exit
EndSelect
WEnd
;=====================================
If $bufer_write = 1 Then
ClipPut($text)
Else
$filetxt = @ScriptDir & '\file_'
$i = 0
While FileExists($filetxt & $i & '.au3')
$i = $i + 1
WEnd
$filetxt = $filetxt & $i & '.au3'
$file = FileOpen($filetxt, 2)
FileWrite($file, $text)
FileClose($file)
EndIf
Func _ReadAU3($text)
$timer = TimerInit() ; засекаем время
$text0 = $text
; начинаем поиск переменных
$aText1 = StringRegExp($text & @CRLF, '\$\w+', 3) ; детектируем переменные в массив
_ArraySort($aText1) ; сортировка массива
$text = ''
For $i = 0 To UBound($aText1) - 1 ; объединение массива в многостроковый текст
$text &= $aText1[$i] & @CRLF
Next
$textZ = ''
For $i = 0 To UBound($aText1) - 1
If StringRegExp($textZ & @CRLF, StringReplace($aText1[$i], "$", "\$") & @CRLF, 0) Then ContinueLoop
$text = StringRegExpReplace($text, StringReplace($aText1[$i], "$", "\$") & @CRLF, @CRLF)
; $text = StringRegExpReplace($text, '\'&$aText1[$i] & @CRLF, @CRLF) ; блин, строка медленней
If @extended > 0 Then $textZ &= @CRLF & $aText1[$i] ; добавляем удалённые переменные в конец списка, такой сбособ исключит повтора переменных в списке $text
Next
$text&=$textZ
$text = StringRegExpReplace($text, '(\n\r){100}', '') ;удаление по 100 пустых строк, иначе при большом количестве, как в WinAPIEx.au3 скрипт вылетает.
$text = StringRegExpReplace($text, '(\n\r)+', '') ;удаление пустых строк
$text01 = StringRegExpReplace($text, "\$", "$")
; конец поиск переменных
$kol = @extended
GUICtrlSetData($Info_Edit1, $text01)
; начинаем поиск функций
$aText2 = StringRegExp($text0, '(?<=\sFunc)\s+(\w*)', 3) ; детектируем функции в массив
_ArraySort($aText2) ; сортировка массива
$text = ''
For $i = 0 To UBound($aText2) - 1 ; объединение массива в многостроковый текст
$text &= $aText2[$i] & @CRLF
Next
$text = StringRegExpReplace($text, '(\n\r){40}', '')
$text02 = StringRegExpReplace($text, '(\r\n){2,}', @CRLF) ;удаление пустых строк
; конец поиск функций
GUICtrlSetData($Info_Edit2, $text02)
$timer=TimerDiff($timer)
GUICtrlSetData($Time, 'Выполнено за '&Round($timer/1000, 1)&' сек')
EndFunc ;==>_ReadAU3
Немогу найти ссылку на тему с поддержкой редактирования итемов GUICtrlCreateListView, если это всё объединить то скрипт создать возможно.