Что нового

[Автоматизация] Нужен инструмент для переименования переменных и функций

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
Версия AutoIt: 3.3.0.0

Описание: Нужен инструмент для переименования переменных и функций.
Эта задача возможно будет интересна для создателей скриптов.
Цель скрипта:
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, если это всё объединить то скрипт создать возможно.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
Этот инструмент уже есть, называется SciTE (полная версия) со всеми его дополнениями.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
Ну кто бы выложил тогда полную версию со всеми дополнениями.


OffTopic:
я в шоке... надо было несколько месяцев заниматься автоитом чтоб узнать о специальном дистрибутиве SciTE с дополнениями, и хоть бы кто словом обмолвился, когда на руборде спрашивал о том в каких каталогах должны лежать дополнительные скачанные утилиты, по крохам нагугленные, а тут оказывается полный комплект всего с таким удобным поиском по справке, с прописанными в Tools всеми утилитами и выполняющими свои функции прямо в SciTE. В общем нет слов... напишите на главной странице красными букавами Скачать SciTE4AutoIt3.exe


Хотя промотр переменных и функций с переименованием пока не нашёл.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
Yashied
Я это и сам знаю... У меня скрипт содержит 30 переменных, причём с вариантами $reg1, $reg112, $reg12. Если я выполню замену $reg1, то и остальные изменятся, и даже напутаются. Нужно контролировать процесс скурпулёзно. А я утилитой хотел добится именно замены, используя регулярные выражения, при котором будут переименовываться только указанные.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
CreatoR
Тогда подскажи, где та тема в которой обсуждалось редактирование итемов GUICtrlCreateListViewItem непосредственно в окне, не мог найти.

В поиске и замене есть функция поиска с RegExp.
как бы я же это понимаю, как бы я уже немало скриптов сделал используя поиск-замену, всё упирается лишь в свободное время.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
AZJIO [?]
где та тема в которой обсуждалось редактирование итемов GUICtrlCreateListViewItem непосредственно в окне, не мог найти
Поиск не работает? :laugh:
вот.


Добавлено:
Сообщение автоматически объединено:

AZJIO [?]
всё упирается лишь в свободное время
Не уверен что понимаю, но там довольно просто и быстро осуществить поиск и замену по регулярным выражениям, единственное(?) ограничение, это однострочный поиск.
 
Автор
A

AZJIO

Меценат
Меценат
Сообщения
2 752
Репутация
1 149
CreatoR
Не уверен что понимаю, но там довольно просто и быстро осуществить поиск и замену по регулярным выражениям
Поиск сделать не трудно, трудно придумать управление в окне, удобство интерфейса.

Поиск не работает?
я на этом форуме тему видел, не могу найти. Конкретно задан был в теме вопрос типа "Можно ли редактировать имена ListViewItem в самом окне", твой ответ "да можно" и пример редактирования. Я пытаюсь его найти и попробовать использовать в своём скрипте. Нужно именно редактировав итем и по нажатию Enter прочитать старое и новое имя и выполнить поиск-замену в срипте. Любые другие варианты не удобнее чем скопировать переменную и по Ctrl+H выполнить замену.


Твой пример на autoitscript.com вылетает на $WM_NOTIFY в 15 строке. А тот что был на этом форуме работал.

Разобрался...
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
AZJIO [?]
на этом форуме тему видел, не могу найти
От меня такой темы небыло, а если не от меня, то это классический пример того, насколько может быть полезным название темы ;) - тот кто создал ту тему, явно не заботился об информативности, ну или мой пример небыл связан напрямую с темой.


Добавлено:
Сообщение автоматически объединено:

P.S
Всё что я смог найти от меня, это ответ в тему [Элементы GUI] Создание GUICtrlCreateListView с элементом GUICtrlCreateDate, но там ссылка на архив с примером с оф. форума, я только указал на пример для вытаскивания с него нужного механизма.
 
Верх