AZJIO Posted March 29, 2011 Share Posted March 29, 2011 (edited) The script is designed to show the variables and functions in the scripts, to avoid duplication, to be able to fearlessly copy of the code of one script to another. Allows you to keep track of variable names to avoid duplication when you want to rename a variable, eg $Path and $PathName. When replacing the $Path will damage $PathName, so you need to temporarily rename $PathName, then rename $Path, and then restore the $PathName. Variables and functions are displayed in one instance and sorted. The window supports drag-and-drop, and resize. The time counter shows the reading of the script or scripts directory. To take the list of local variables: Copy "Func...EndFunc" to the clipboard, click "clipboard>", and then "Local". In a clipboard there will be a string. Can throw the script out the window or directory scripts. In the latter case, the output only functions. Also specify the path to the script at the command prompt, which is convenient when working in a text editor. C:AutoIt3Notepad++shortcuts.xml <!--> Alt+F8 - list_var_funk </!--> <Command name="list_var_funk" Ctrl="no" Alt="yes" Shift="no" Key="119">"$(NPP_DIRECTORY)\..\AutoIt3.exe" "$(NPP_DIRECTORY)\Instrument_azjio\list_var_funk.au3" "$(FULL_CURRENT_PATH)"</Command> C:AutoIt3SciTEPropertiesau3.properties # 34 list_var_funk command.34.$(au3)="$(autoit3dir)\autoit3.exe" "$(SciteDefaultHome)\Instrument_azjio\list_var_funk.au3" "$(FilePath)" command.name.34.$(au3)=list_var_funk command.shortcut.34.$(au3)=Alt+F8 command.subsystem.34.$(au3)=0 command.save.before.34.$(au3)=1 command.is.filter.34.$(au3)=1 command.quiet.34.$(au3)=1 Hotkeys Ctrl + Left Arrow - a list of variables to copy to clipboard Ctrl + Right Arrow - a list of functions to copy to clipboard Ctrl + Down Arrow - imported from Clipboard Ctrl + Up Arrow - a list of variables to copy to the clipboard as a local variable expandcollapse popup; @AZJIO 25.10.2010 - 31.08.2013 #include <File.au3> #include <WindowsConstants.au3> #include <GUIConstantsEx.au3> ; En $LngTitle = 'Variables and Functions' $LngFO1 = 'Select File.' $LngFO2 = 'Script' $LngMs1 = 'Message' $LngMs2 = 'No variables.' & @CRLF & 'Continue?' $LngMs3 = 'Not found.' $LngMs4 = 'Delete constants?' $LngMs5 = 'Loop variables:' $LngMs6 = 'Variables constants:' $LngMs7 = 'Variables passed to the function:' $LngMs8 = 'The following variables are removed from the result' $LngMs9 = 'Delete the global variables by hand!' $LngLVr = 'Variables' $LngLFu = 'Functions' $LngStr = 'Strings' $LngLPc = 'pieces' $LngCb1 = '> clipboard' $LngCbH1 = 'Copy the list of variables' & @CRLF & 'to the clipboard' $LngCb2 = 'clipboard >' $LngCbH2 = 'Import from the clipboard' & @CRLF & 'and show a list of variables' $LngLcH = 'List as a local' & @CRLF & 'variable declaration' $LngCbHF = 'Copy the list of functions' & @CRLF & 'to the clipboard' $LngInc = 'See all the functions' & @CRLF & 'in the directory "Include"' $LngLt1 = 'Done in' $LngLt2 = 'sec' $LngUse = 'Use' $LngRep = 'Counting the number ' & @CRLF & 'of repetitions of variables' $LngOpi = 'Open the file folder "Include"' $helpmsg = 'Hotkeys' & @CRLF & @CRLF & _ 'Ctrl + Left Arrow - a list of variables to copy to clipboard' & @CRLF & _ 'Ctrl + Right Arrow - a list of functions to copy to clipboard' & @CRLF & _ 'Ctrl + Down Arrow - imported from Clipboard' & @CRLF & _ 'Ctrl + Up Arrow - a list of variables to copy to the clipboard as a local variable declaration' & @CRLF & @CRLF & _ 'Can throw the script out the window or directory scripts. In the latter case, the output only functions. Also specify the path to the script at the command prompt, which is convenient when working in a text editor.' & @CRLF & @CRLF & _ 'The script is designed to show the variables and functions in the scripts, to avoid duplication, to be able to fearlessly copy of the code of one script to another. Allows you to keep track of variable names to avoid duplication when you want to rename a variable, eg $Path and $PathName. When replacing the $Path will damage $PathName, so you need to temporarily rename $PathName, then rename $Path, and then restore the $PathName. Variables and functions are displayed in one instance and sorted. The window supports drag-and-drop, and resize. The time counter shows the reading of the script or scripts directory.' ; Ru ; если русская локализация, то русский язык If @OSLang = 0419 Then $LngTitle = 'Переменные и функции' $LngFO1 = 'Выбор файла.' $LngFO2 = 'Скрипт' $LngMs1 = 'Сообщение' $LngMs2 = 'Нет переменных.' & @CRLF & 'Продолжить?' $LngMs3 = 'Не найдено.' $LngMs4 = 'Удалить константы?' $LngMs5 = 'Переменные цикла:' $LngMs6 = 'Переменные константы:' $LngMs7 = 'Переменные переданные в функцию:' $LngMs8 = 'Из результата удалены следующие переменные' $LngMs9 = 'Удалите глобальные переменные вручную!' $LngLVr = 'Переменные' $LngLFu = 'Функции' $LngStr = 'Строки' $LngLPc = 'шт' $LngCb1 = 'в буфер' $LngCbH1 = 'Скопировать список переменных ' & @CRLF & 'в буфер обмена' $LngCb2 = 'из буфера' $LngCbH2 = 'Прочитать код из буфера' & @CRLF & 'и показать список переменных' $LngLcH = 'Список в виде локального' & @CRLF & 'объявления переменных' $LngCbHF = 'Скопировать список функций ' & @CRLF & 'в буфер обмена' $LngInc = 'Показать все функции' & @CRLF & 'каталога Include' $LngLt1 = 'Выполнено за' $LngLt2 = 'сек' $LngUse = 'Используйте' $LngRep = 'Подсчитывать количество' & @CRLF & 'повторов переменных' $LngOpi = 'Открыть файл папки Include' $helpmsg = 'Горячие клавиши' & @CRLF & @CRLF & _ 'Ctrl+стрелка влево - список переменных скопировать в буфер обмена' & @CRLF & _ 'Ctrl+стрелка вправо - список функций скопировать в буфер обмена' & @CRLF & _ 'Ctrl+стрелка вниз - обработать буфер обмена' & @CRLF & _ 'Ctrl+стрелка вверх - список переменных скопировать в буфер обмена в виде локального объявления переменных' & @CRLF & @CRLF & _ 'Можете кинуть скрипт в окно или каталог скриптов. В последнем случае вывод только функций. Также указать путь к скрипту в ком-строке, что удобно при работе в текстовом редакторе имеющего вызов других утилит.' & @CRLF & @CRLF & _ 'Скрипт предназначен для просмотра переменных и функций в скриптах на предмет пересечения, для возможности безбоязненно копировать часть кода одного скрипта в другой. Также позволяет визуально отследить что при выполнении замены имени переменной не произойдёт порча близкой по имени переменной, например $Path и $PathName. При замене $Path испортится $PathName, поэтому можно временно переименовать сначала $PathName, а потом $Path и далее восстановить $PathName. Переменные и функции читаются из скрипта в одном экзэмпляре и сортируются. Окно поддерживает drag-and-drop, и изменение размера окна. Счётчик времени показывает время считывания скрипта или каталога скриптов.' EndIf #include<Array.au3> Opt("GUIResizeMode", 802) $bufer_read33 = 0 ; если 1 то читаем из буфера, если 0 то диалог выбора файла Global $k, $kf, $text01, $text02, $text0, $text, $Info_Edit1, $Info_Edit2, $Time, $timer, $FileName = '', $FilePath If $CmdLine[0] = 0 Then If $bufer_read33 = 1 Then $text = ClipGet() Else $Path = FileOpenDialog($LngFO1, @WorkingDir & "", $LngFO2 & " (*.au3)", 1 + 4) If @error Then Exit $FileName = StringRegExpReplace($Path, '(^.*)\\(.*)$', '\2') $file = FileOpen($Path, 0) $text = FileRead($file) FileClose($file) $FilePath = $Path EndIf Else If FileExists($CmdLine[1]) Then $file = FileOpen($CmdLine[1], 0) $text = FileRead($file) FileClose($file) $FileName = StringRegExpReplace($CmdLine[1], '(^.*)\\(.*)$', '\2') $FilePath = $CmdLine[1] EndIf EndIf Global $TrChe = 0 _ReadAU3($text) If $k = 0 And MsgBox(4, $LngMs1, $LngMs2) = 7 Then Exit If $k < 25 Then $pos = $k If $k = 0 Then $pos = 5 Else $pos = 25 EndIf $Gui = GUICreate($LngTitle, 410, $pos * 17 + 110, -1, -1, $WS_OVERLAPPEDWINDOW, $WS_EX_ACCEPTFILES) $CatchDrop = GUICtrlCreateLabel("", 0, 0, 410, $pos * 17 + 120) GUICtrlSetState(-1, $GUI_DISABLE + $GUI_DROPACCEPTED) GUICtrlSetResizing(-1, 1) $per = GUICtrlCreateLabel($LngLVr & ' - ' & $k & ' ' & $LngLPc, 8, 3, 190, 17) GUICtrlSetResizing(-1, 1 + 2 + 32 + 512) $fun = GUICtrlCreateLabel($LngLFu & ' - ' & $kf & ' ' & $LngLPc, 208, 3, 190, 17) GUICtrlSetResizing(-1, 1 + 4 + 32 + 512) $Info_Edit1 = GUICtrlCreateEdit($text01, 8, 22, 190, $pos * 17 + 40) GUICtrlSetResizing(-1, 1 + 2 + 32 + 64) $Info_Edit2 = GUICtrlCreateEdit($text02, 208, 22, 190, $pos * 17 + 40) GUICtrlSetResizing(-1, 1 + 4 + 32 + 64) $iToClipboardVar = GUICtrlCreateButton($LngCb1, 8, $pos * 17 + 67, 61, 22) GUICtrlSetResizing(-1, 1 + 2 + 64 + 256 + 512) GUICtrlSetTip(-1, $LngCbH1) $iFromClipboard = GUICtrlCreateButton($LngCb2, 72, $pos * 17 + 67, 61, 22) GUICtrlSetResizing(-1, 1 + 2 + 64 + 256 + 512) GUICtrlSetTip(-1, $LngCbH2) $iLocalToClipboard = GUICtrlCreateButton('Local', 136, $pos * 17 + 67, 61, 22) GUICtrlSetResizing(-1, 1 + 2 + 64 + 256 + 512) GUICtrlSetTip(-1, $LngLcH) $iToClipboardFunc = GUICtrlCreateButton($LngCb1, 208, $pos * 17 + 67, 61, 22) GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512) GUICtrlSetTip(-1, $LngCbHF) $Include = GUICtrlCreateButton('Include', 272, $pos * 17 + 67, 61, 22) GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512) GUICtrlSetTip(-1, $LngInc) $iStr = GUICtrlCreateButton('Str', 336, $pos * 17 + 67, 37, 22) GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512) $help = GUICtrlCreateButton('?', 375, $pos * 17 + 67, 22, 22) GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512) $Time = GUICtrlCreateLabel($LngLt1 & ' ' & Round($timer / 1000, 1) & ' ' & $LngLt2, 8, $pos * 17 + 93, 160, 17) GUICtrlSetResizing(-1, 1 + 64 + 512) GUICtrlCreateLabel($LngUse & ' drag-and-drop', 178, $pos * 17 + 93, 160, 17) GUICtrlSetResizing(-1, 1 + 64 + 512) If $FileName <> '' Then WinSetTitle($Gui, '', $FileName & ' - ' & $LngTitle) $Che = GUICtrlCreateCheckbox('N', 340, $pos * 17 + 67 + 24, 25, 17) GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512) GUICtrlSetTip(-1, $LngRep) $OpInc = GUICtrlCreateButton('Open', 369, $pos * 17 + 67 + 24, 36, 18) GUICtrlSetResizing(-1, 1 + 4 + 64 + 256 + 512) GUICtrlSetTip(-1, $LngOpi) Dim $AccelKeys[4][2] = [["^{LEFT}", $iToClipboardVar],["^{RIGHT}", $iToClipboardFunc],["^{DOWN}", $iFromClipboard],["^{UP}", $iLocalToClipboard]] GUISetAccelerators($AccelKeys) GUISetState() GUIRegisterMsg(0x0024, "WM_GETMINMAXINFO") Send('^{HOME}') While 1 Switch GUIGetMsg() Case $iStr $text = FileRead($FilePath) $kf = 0 $text02 = '' _stripComments($text) ; Удаление комментариев $text=StringRegExp($text, '(?m)"[^"]*?"|''[^'']*?''', 3) ; Извлечение строк заключённых в кавычки If @error Then GUICtrlSetData($Info_Edit2, '') Else $kf = UBound($text) For $i In $text ; объединение массива в многостроковый текст $text02 &= $i & @CRLF Next GUICtrlSetData($Info_Edit2, $text02) EndIf GUICtrlSetData($fun, $LngStr & ' - ' & $kf & ' ' & $LngLPc) Case $OpInc $tmp = RegRead("HKLM\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & '\Include' If @error Or Not FileExists($tmp) Then $tmp = @WorkingDir $tmp = FileOpenDialog('Open', $tmp, 'Script (*.au3)', 1, '', $Gui) If @error Then ContinueLoop $FilePath = $tmp _OpenFile($tmp) Case $Include $tmp = RegRead("HKLM\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & '\Include' If @error Or Not FileExists($tmp) Then ContinueLoop _Include($tmp) Case $iLocalToClipboard $tmp = StringRegExpReplace(GUICtrlRead($Info_Edit1), @CRLF & '\$', ', $') $tmp = StringReplace($tmp, @CRLF, '') & ', ' ; удаляет лишние переносы и в конец строки добавляет $tmp1 = ClipGet() _stripComments($tmp1) ; Удаление комментариев $tmp1 = StringRegExpReplace($tmp1, '(?m)"[^"]*?"|''[^'']*?''', '') ; Удаление строк заключённых в кавычки Local $DelLocal[1] = [0] $DelLocalTmp = '' ; Удаление переменных счётчика цикла $aTmp = StringRegExp($tmp1, '(?mi)For\h+(\$\w+)\h*=\h*\d+\h+To\h+', 3) ; Определяем наличие переменных счётчика цикла If Not @error Then _ArrayUnique2($aTmp) _ArrayConcatenate($DelLocal, $aTmp) ; Присоединяем массив $DelLocalTmp &= $LngMs5 & @LF ; Переменные константы: For $i = 0 To UBound($aTmp) - 1 $DelLocalTmp &= @TAB & $aTmp[$i] & @LF Next EndIf ; Удаление констант $aTmp = StringRegExp($tmp1, '\$[_A-Z\d]+(?!\w)', 3) If Not @error Then _ArrayUnique2($aTmp) $Tmp2 = '' For $i = 0 To UBound($aTmp) - 1 $Tmp2 &= @TAB & $aTmp[$i] & @LF Next If MsgBox(4, $LngMs1, $LngMs4 & @LF & $Tmp2, 0, $Gui) = 6 Then ; Удалить константы? _ArrayConcatenate($DelLocal, $aTmp) ; Присоединяем массив $DelLocalTmp &= $LngMs6 & @LF ; Переменные цикла:' $DelLocalTmp &= $Tmp2 EndIf EndIf ; Удаление переданных в функцию переменных $aTmp = StringRegExp($tmp1, '(?m)^\s*Func\h+\w+?\h*\((.+)\)', 1) ; Содержимое 1-ой строки If Not @error And StringInStr($aTmp[0], '$') Then $aTmp = StringRegExp($aTmp[0], '\$\w+', 3) ; Парсит содержимое 1-ой строки ; If Not @error Then _ArrayConcatenate($DelLocal, $aTmp) ; Присоединяем массив If Not @error Then _ArrayUnique2($aTmp) _ArrayConcatenate($DelLocal, $aTmp) ; Присоединяем массив $DelLocalTmp &= $LngMs7 & @LF ; Переменные переданные в функцию: For $i = 0 To UBound($aTmp) - 1 $DelLocalTmp &= @TAB & $aTmp[$i] & @LF Next EndIf EndIf For $i = 1 To UBound($DelLocal) - 1 $tmp = StringReplace($tmp, $DelLocal[$i] & ', ', '') ; Удаляет из результата недопустимые переменные: счётчик цикла, константы и переданные в функцию Next $tmp = StringRegExpReplace($tmp, '(, ){2,}', '\1') If StringRight($tmp, 2) = ', ' Then $tmp = StringTrimRight($tmp, 2) ClipPut(@CRLF & @TAB & 'Local ' & $tmp) If $DelLocalTmp Then MsgBox(0, $LngMs8, $DelLocalTmp & @LF & $LngMs9, 0, $Gui) Case $iFromClipboard _ReadAU3(ClipGet()) GUICtrlSetData($per, $LngLVr & ' - ' & $k & ' ' & $LngLPc) GUICtrlSetData($fun, $LngLFu & ' - ' & $kf & ' ' & $LngLPc) WinSetTitle($Gui, '', $LngCb2 & ' - ' & $LngTitle) Case $iToClipboardVar ClipPut(GUICtrlRead($Info_Edit1)) Case $iToClipboardFunc ClipPut(GUICtrlRead($Info_Edit2)) Case $Che If GUICtrlRead($Che) = 1 Then $TrChe = 1 Else $TrChe = 0 EndIf If FileExists($FilePath) Then _OpenFile($FilePath) EndIf Case $GUI_EVENT_DROPPED $FilePath = @GUI_DragFile _OpenFile(@GUI_DragFile) Case $help _MsgFile() Case -3 Exit EndSwitch WEnd Func _OpenFile($sPath) If StringInStr(FileGetAttrib($sPath), "D") Then _Include($sPath) ElseIf StringRight($sPath, 4) = '.au3' Then _ReadAU3(FileRead($sPath)) GUICtrlSetData($per, $LngLVr & ' - ' & $k & ' ' & $LngLPc) GUICtrlSetData($fun, $LngLFu & ' - ' & $kf & ' ' & $LngLPc) WinSetTitle($Gui, '', StringRegExpReplace($sPath, '(^.*)\\(.*)$', '\2') & ' - ' & $LngTitle) EndIf EndFunc ;==>_OpenFile Func _Include($sPath) $search = _FileListToArray($sPath, '*.au3', 1) If @error Then MsgBox(0, $LngMs1, $LngMs3) Return EndIf Local $aText, $lkf $textAll = '' $timer = TimerInit() For $i = 1 To $search[0] $aText = StringRegExp(FileRead($sPath & '\' & $search[$i]), '(?:\sFunc)\s+(\w*)', 3) If @error Then $textAll &= @CRLF & '- - - - ' & $search[$i] & ' - - - -' Else $lkf += UBound($aText) $textAll &= @CRLF & @CRLF & @CRLF & '+++++ ' & $search[$i] & ' +++++' & @CRLF & @CRLF GUICtrlSetData($Time, $search[$i]) For $j In $aText $textAll &= $j & @CRLF Next EndIf Next WinSetTitle($Gui, '', StringRegExpReplace($sPath, '(^.*)\\(.*)$', '\2') & ' - ' & $LngTitle) GUICtrlSetData($Info_Edit2, $textAll) GUICtrlSetData($Info_Edit1, '') GUICtrlSetData($per, $LngLVr) GUICtrlSetData($fun, $LngLFu & ' - ' & $lkf & ' ' & $LngLPc) $timer = TimerDiff($timer) GUICtrlSetData($Time, $LngLt1 & ' ' & Round($timer / 1000, 2) & ' ' & $LngLt2) EndFunc ;==>_Include Func _ReadAU3($text) $timer = TimerInit() ; засекаем время _stripComments($text) ; Удаление комментариев $text = StringRegExpReplace($text, '(?m)"[^"]*?"|''[^'']*?''', '') ; Удаление строк заключённых в кавычки ; начинаем поиск переменных $k = 0 $aNameVar = StringRegExp($text, '(?<=\$)\w+', 3) ; детектируем переменные в массив $text01 = '' If @error Then GUICtrlSetData($Info_Edit1, '') Else For $i = 0 To UBound($aNameVar) - 1 ; Вычисляем количество дубликатов переменных Assign($aNameVar[$i] & '/', Eval($aNameVar[$i] & '/') + 1, 1) If Eval($aNameVar[$i] & '/') = 1 Then $aNameVar[$k] = $aNameVar[$i] $k += 1 EndIf Next ReDim $aNameVar[$k] _ArraySort($aNameVar) ; сортировка массива If $TrChe = 1 Then For $i = 0 To UBound($aNameVar) - 1 $text01 &= "$" & $aNameVar[$i] & ' - ' & Eval($aNameVar[$i] & '/') & @CRLF Next Else For $i = 0 To UBound($aNameVar) - 1 $text01 &= "$" & $aNameVar[$i] & @CRLF Next EndIf GUICtrlSetData($Info_Edit1, $text01) EndIf ; начинаем поиск функций $kf = 0 $aFunc = StringRegExp($text, '\s\h*Func\h+(\w+)', 3) ; детектируем функции в массив $text02 = '' If @error Then GUICtrlSetData($Info_Edit2, '') Else _ArraySort($aFunc) ; сортировка массива $kf = UBound($aFunc) For $i In $aFunc ; объединение массива в многостроковый текст $text02 &= $i & @CRLF Next ; конец поиск функций GUICtrlSetData($Info_Edit2, $text02) EndIf $timer = TimerDiff($timer) GUICtrlSetData($Time, $LngLt1 & ' ' & Round($timer / 1000, 2) & ' ' & $LngLt2) EndFunc ;==>_ReadAU3 Func WM_GETMINMAXINFO($hWnd, $iMsg, $wParam, $lParam) If $hWnd = $Gui Then Local $aWorkArea = _WinAPI_GetWorkingArea() Local $tMINMAXINFO = DllStructCreate("int;int;" & _ "int MaxSizeX; int MaxSizeY;" & _ "int MaxPositionX;int MaxPositionY;" & _ "int MinTrackSizeX; int MinTrackSizeY;" & _ "int MaxTrackSizeX; int MaxTrackSizeY", _ $lParam) DllStructSetData($tMINMAXINFO, "MinTrackSizeX", 410) ; минимальные размеры окна DllStructSetData($tMINMAXINFO, "MinTrackSizeY", 200) DllStructSetData($tMINMAXINFO, "MaxPositionX", $aWorkArea[0]) DllStructSetData($tMINMAXINFO, "MaxPositionY", $aWorkArea[1]) DllStructSetData($tMINMAXINFO, "MaxSizeX", 600) ; размеры развёрнутого состояния ( просто удали строку, чтоб игнорировать критерий) DllStructSetData($tMINMAXINFO, "MaxSizeY", $aWorkArea[3] - $aWorkArea[1]) EndIf EndFunc ;==>WM_GETMINMAXINFO Func _WinAPI_GetWorkingArea() Local Const $SPI_GETWORKAREA = 48 Local $stRECT = DllStructCreate("long; long; long; long") Local $SPIRet = DllCall("User32.dll", "int", "SystemParametersInfo", "uint", $SPI_GETWORKAREA, "uint", 0, "ptr", DllStructGetPtr($stRECT), "uint", 0) If @error Then Return 0 If $SPIRet[0] = 0 Then Return 0 Local $sLeftArea = DllStructGetData($stRECT, 1) Local $sTopArea = DllStructGetData($stRECT, 2) Local $sRightArea = DllStructGetData($stRECT, 3) Local $sBottomArea = DllStructGetData($stRECT, 4) Local $aRet[4] = [$sLeftArea, $sTopArea, $sRightArea, $sBottomArea] Return $aRet EndFunc ;==>_WinAPI_GetWorkingArea Func _MsgFile() GUISetState(@SW_DISABLE, $Gui) $Gui1 = GUICreate($LngMs1, 500, 340, -1, -1, -1, 0x00000080, $Gui) GUICtrlCreateLabel($helpmsg, 15, 10, 480, 330) GUISetState(@SW_SHOW, $Gui1) While 1 If GUIGetMsg() = -3 Then GUISetState(@SW_ENABLE, $Gui) GUIDelete($Gui1) ExitLoop EndIf WEnd EndFunc ;==>_MsgFile ; заимствовано из "Organize Includes" Func _stripComments(ByRef $string) $string = StringRegExpReplace($string, "(?s)\r(?!\n)", '\r\n') ; ??? добавляем @LF в строку, если его нет (AZJIO) ;Author: Prog@ndy $string = StringReplace(StringReplace($string, "#comments-start", "#cs", 0, 2), "#comments-end", "#ce", 0, 2) ; $string = StringRegExpReplace($string, "(?si)(\v|\A)\h*#cs\b.*?\v\h*#ce\b", '') ; remove simple block comments (mod AZJIO) #region remove nested block-comments Local $match, $depth, $offset, $start, $CommentsAfterce While 1 $depth = 0 $match = StringRegExp($string, "(?im)^\h*#cs\b", 1) $start = @extended If @error Then ExitLoop Do $match = StringRegExp($string, "(?im)^\h*#c([se])\b", 1, $offset) $offset = @extended Select Case @error Return False Case $match[0] = "e" $depth -= 1 Case Else $depth += 1 EndSelect Until $depth < 1 $string = StringLeft($string, $start - 4) & StringRegExpReplace(StringMid($string, $offset), ".*", '', 1) ;~ $string = StringLeft($string, $start-4) & StringMid($string, $offset) WEnd #endregion remove nested block-comments $string = StringRegExpReplace($string & @CRLF, '(?m)^((?:[^''";]*([''"]).*?\2)*[^;]*)\h*;.*$', '\1') ; remove one-line comments (недостаток - не работает если @CR без @LF) $string = StringRegExpReplace($string, '\s+\z', '') ; удалить пустое в конце Return True EndFunc ;==>_stripComments Func _ArrayUnique2(ByRef $data) ; Удаление дубликатов Local $k $k = -1 For $i = 0 To UBound($data) - 1 If Not IsDeclared($data[$i] & '/') Then $k += 1 $data[$k] = $data[$i] Assign($data[$i] & '/', '', 1) EndIf Next If $k = -1 Then Return SetError(1, 0, 0) $k += 1 ReDim $data[$k] Return SetError(0, 0, $k) EndFunc ;==>_ArrayUnique2 See also: Renaming variables Edited November 14, 2013 by AZJIO My other projects or all Link to comment Share on other sites More sharing options...
twitchyliquid64 Posted April 4, 2011 Share Posted April 4, 2011 Nice script, im sure it will be useful in large projects. ongoing projects:-firestorm: Largescale P2P Social NetworkCompleted Autoit Programs/Scripts: Variable Pickler | Networked Streaming Audio (in pure autoIT) | firenet p2p web messenger | Proxy Checker | Dynamic Execute() Code Generator | P2P UDF | Graph Theory Proof of Concept - Breadth First search Link to comment Share on other sites More sharing options...
AZJIO Posted August 31, 2013 Author Share Posted August 31, 2013 Updated My other projects or all Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now