Jump to content

Recommended Posts

Hi!

I need a little bit help from some RegEx experts please:
I would make my ISN AutoIt Studio faster when generating the scripttree. And what would be better to do this via regex?

Problem is i am not really good at this regex stuff. So maybe someone could help me here.
 

The challange is to get all Global Variables from a script via RegEx in a Array.
Here is a example script with some tests:

Global $Var1 = 1234 

Local $Local_Var = 1234

$Ignore_me_too = 1234

Global $Var2 = 1234, $var3 = 1242

Global $ahIcons[30], $ahLabels[30]

Global Const $Var4 = iniread($inivar1,"jj","jj","") , $var5= iniread($inivar2,"jj","jj","")

Global $Var_String = "was"

Global $Array_Test[16] = [1,15,16,0,31,15,25,15,25,30,8,30,8,15,1,15]

Global Enum $MARGIN_SCRIPT_NUMBER = 0, $MARGIN_SCRIPT_ICON, $MARGIN_SCRIPT_FOLD

Global Const $Delim = '\', $Delim1 = '|'

Global $hard1 = "a", _
$hard2 = "b", _ 
$hard3 = "c"

 

The returning array should look like this:

$Var1
$Var2
$var3
$Var4
$var5
$Var_String
$Array_Test
$MARGIN_SCRIPT_NUMBER
$MARGIN_SCRIPT_ICON
$MARGIN_SCRIPT_FOLD
$Delim
$Delim1
$hard1
$hard2
$hard3

 

I already made some success with a expression i found in the SciTE Jump Tool:  (\$\w+)(?:[\h\[.=+*/^,)\-])?
This nearly returns the perfect results. But it does not check if it´s a global variable (with the const and enum options) and also returns variables in commands (for example
$inivar1)

I also found this regex: (?im:^(?=Global|Const|Enum|Static)(?:Global)?\h*(?:Const|Enum|Static)?(?:(?<=Enum)\h+Step\h+[+*-]\d+)?\h*)([^\r\n .\=]+)
This returns also usefull results...but trying to understand this explodes my head :D


Maybe someone can help me here?
Thanks in advance! ;);)

Edited by ISI360
Link to post
Share on other sites

Albeit not impossible, you'd have to embark a complete AutoIt grammar parser in pure regexp to be able to process arbitrary code and correctly extract globals.

This wonderful site allows debugging and testing regular expressions (many flavors available). An absolute must have in your bookmarks.
Another excellent RegExp tutorial. Don't forget downloading your copy of up-to-date pcretest.exe and pcregrep.exe here
RegExp tutorial: enough to get started
PCRE v8.33 regexp documentation latest available release and currently implemented in AutoIt beta.

SQLitespeed is another feature-rich premier SQLite manager (includes import/export). Well worth a try.
SQLite Expert (freeware Personal Edition or payware Pro version) is a very useful SQLite database manager.
An excellent eBook covering almost every aspect of SQLite3: a must-read for anyone doing serious work.
SQL tutorial (covers "generic" SQL, but most of it applies to SQLite as well)
A work-in-progress SQLite3 tutorial. Don't miss other LxyzTHW pages!
SQLite official website with full documentation (may be newer than the SQLite library that comes standard with AutoIt)

Link to post
Share on other sites

Hi,

I have a suggestion but is not perfect:

(?im:^(?=Global|Const|Enum|Static)(?:Global|Static)?\h*(?:Global|Const|Enum|Static)?(?:(?<=Enum)\h+Step\h+[+*-]\h*\d+)?\h*)(\$(?:\w)+)(?:.*?,(?:[\h_\n]*)*(\$(?:\w)+)*)?(?:.*?,(?:[\h_\n]*)*(\$(?:\w)+)*)?

I tested it with this:

Global $Var1 = 1234
Global $Test
global $1we, $dgg,$errzuu
Local $Local_Var = 1234
$Ignore_me_too = 1234
Global $Var2 = 1234, $var3 = 1242
Global $ahIcons[30], $ahLabels[30]
Global Const $Var4 = iniread($inivar1,"jj","jj","") , $var5= iniread($inivar2,"jj","jj","")
Global $Var_String = "was"
Global $Array_Test[16] = [1,15,16,0,31,15,25,15,25,30,8,30,8,15,1,15]
Global Enum $MARGIN_SCRIPT_NUMBER = 0, $MARGIN_SCRIPT_ICON, $MARGIN_SCRIPT_FOLD
Global Const $Delim = '\', $Delim1 = '|'
Global $hard1 = "a", _
$hard2 = "b", _ 
$hard3 = "c"
Static global $rest
global static $test
Global Enum STEP + 2 $eVariant1 = 1, $eVariant2, $eVariant3 = 5, $eVariant4
static local $test
local static $dfgt

If you try this you may see it will not catch $eVariant4. For every variable more you need this append to regex:

(?:.*?,(?:[\h_\n]*)*(\$(?:\w)+)*)?

That‘s not that perfect as I wanted but I didn’t get it working to „loop“. I thought change ? with * but then you catch only the last one and not the matches in between. But maybe some other get it working more perfect.

Regards, Conrad

SciTE4AutoIt = 3.7.3.0   AutoIt = 3.3.14.2   AutoItX64 = 0   OS = Win_10   Build = 19044   OSArch = X64   Language = 0407/german
H:\...\AutoIt3\SciTE     H:\...\AutoIt3      H:\...\AutoIt3\Include     (H:\ = Network Drive)

   88x31.png  Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind.

Link to post
Share on other sites

Just an FYI, unless $Local_Var is in a function, it's still a global variable regardless of what you use to declare it in the Global scope.

If I posted any code, assume that code was written using the latest release version unless stated otherwise. Also, if it doesn't work on XP I can't help with that because I don't have access to XP, and I'm not going to.
Give a programmer the correct code and he can do his work for a day. Teach a programmer to debug and he can do his work for a lifetime - by Chirag Gude
How to ask questions the smart way!

I hereby grant any person the right to use any code I post, that I am the original author of, on the autoitscript.com forums, unless I've specifically stated otherwise in the code or the thread post. If you do use my code all I ask, as a courtesy, is to make note of where you got it from.

Back up and restore Windows user files _Array.au3 - Modified array functions that include support for 2D arrays.  -  ColorChooser - An add-on for SciTE that pops up a color dialog so you can select and paste a color code into a script.  -  Customizable Splashscreen GUI w/Progress Bar - Create a custom "splash screen" GUI with a progress bar and custom label.  -  _FileGetProperty - Retrieve the properties of a file  -  SciTE Toolbar - A toolbar demo for use with the SciTE editor  -  GUIRegisterMsg demo - Demo script to show how to use the Windows messages to interact with controls and your GUI.  -   Latin Square password generator

Link to post
Share on other sites

@Simpel:
Thanks, looks very interesting!

Would it be an option to first strip the values of the variables? (They are not needed)

So that

Global Const $Var4 = iniread($inivar1,"jj","jj","") , $var5= iniread($inivar2,"jj","jj","")
Global Enum STEP + 2 $eVariant1 = 1, $eVariant2, $eVariant3 = 5, $eVariant4
Global Const $Delim = '\', $Delim1 = '|'

becomes to

Global Const $Var4, $var5
Global Enum STEP + 2 $eVariant1, $eVariant2, $eVariant3, $eVariant4
Global Const $Delim, $Delim1

Would this then be easier to regex? If yes, have you a idea how to strip this stuff? :P

Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By TTE26
      How can I get a full name for a folder that starts with "data_" and ends with random numbers and characters?
      I want to get a folders name inside Temp Directory.
      Not sure how to even start. 🤭

      Any suggestions? 🤔
    • By RAMzor
      Hi everyone,
      I have this string:
      "main_lot      0x111” & @CRLF & “main_version          0xABC” & @CRLF & “main_number 0xDEAD123” & @CRLF & “main_version          0x333"
      And I'm trying to extract one specific hexadecimal number, actually main_version from this string by using StringRegExp:
      How to get 'ABC' from it?
      I'm not sure if the original string uses @CRLF, @CR or @LF as a line breaks (received from linux over ssh plink.exe) I have tried this code but it doesn't work 
      #include <Array.au3> $sLog = "main_lot 0x111” & @CRLF & “main_version 0xABC” & @CRLF & “main_number 0xDEAD123” & @CRLF & “main_version 0x333" $aVer = StringRegExp($sLog, "main_version\h*(.+)(?:0[xX][[:xdigit:]])", 3) _ArrayDisplay($aVer)  
       
    • By TheSaint
      As many of you may not be aware, of much about AutoIt's humble beginnings, and aspects related to the first GUI version of AutoIt, I thought it might be nice to create a historical reference here for all the many GUI creators that have been created by various people over the years.
      NOTE - While one could argue, that this topic might be better placed in one of the Chat forums, I would argue, that it links to heaps of good code. While much may be redundant in that code, it is still interesting and forms a great perspective. Many are bound to find useful elements at the very least.
      Koda, is no doubt the most well-known GUI creator now, but there was a time, when CyberSlug's legendary GUIBuilder (first known as AutoBuilder) ruled the roost, and AutoIt coder's saw it as a Godsend. AutoIt coding was much simpler back then of course.
      Below, will be a timeline, of any AutoIt GUI creators listed in forum pages. It will be added to by myself as I find them or as others here find them and place a link in a subsequent post ... PLEASE HELP! Comments welcome too.
      (Also note, that this is also intended to include updates, branches etc by others)
      Apr 20 2004 - AutoBuilder by CyberSlug.
      Sep 27 2004 - An interesting topic, where CyberSlug talks about the future of AutoBuilder (etc) and renaming to GUIBuilder and you see the first mentions and links to updates by others (including myself & livewire).
      Nov 05 2004 - A topic where lookfar is working on a SciTE replacement, talks about starting a Form Designer.
      Aug 10 2005 - GuiBuilder first update by TheSaint.
      Sep 26 2005 - GUIBuilder updates by livewire (he also talks about transferring his efforts to Koda).
      Nov 02 2005 - KODA FormDesigner v1.3 by lookfar
      Nov 03 2005 - Seemingly interesting topic about forms by tonedeaf
      Dec 26 2005 - AutoIt Studio(beta) by BillLuvsU
      Jan 09 2006 - AutoBuilder update (or branch) by _^__darkbytez (livewire also posts).
      Feb 19 2006 - Koda v1.5 by lookfar
      Sep 07 2006 - Koda v1.7.3.0 by Lazycat
      Jan 07 2007 - Form/GUI Builder by FlintBrenick
      Jun 10 2007 - Gorganizer by _Kurt (more of an assister than actual GUI maker)
      Jun 27 2007 - Basic GUI Designer by Mast3rpyr0
      May 03 2008 - Autoit Programmer's Desktop (APD) by Ealric
      Jul 11 2008 - Gui Designer by Alek
      Aug 11 2008 - Gorganizer update by _Kurt
      Jun 19 2009 - Easy GUI by Mat
      Aug 13 2009 - GUI Script Creator by Pandemic (not sure this qualifies, but it made me think of templates)
      Aug 16 2010 - Creation Gui by AZJIO
      Jan 22 2012 - ISN AutoIt Studio by ISI360 (includes ISN Form Studio 2, a GUI editor)
      Mar 19 2012 - Arduino GUI Programmer by nikosliapis (creates a specific type of GUI)
      Aug 01 2012 - GuiBuilder Resurrected update/branch to GUIBuilder by baroquebob
      Dec 01 2012 - Form Builder beta (v1.0.6) by BuckMaster
      Jan 12 2015 - GUIBuilderNxt update by jaberwacky of GUIBuilder v0.8 (as a new prototype, modified to work with latest AutoIt) (not a update to the Resurrected version)
      Aug 12 2016 - The GuiBuilder Return by DFerrato as an update to GUIBuilder,
      Jan 17 2017 - GUIBuilder Project by TheSaint (a work in progress based on CyberSlug's original ... and later versions, updated by Roy, TheSaint & others).
      May 29 2019 - The GuiBuilder Return by DFerrato as an update to GUIBuilder, His new and improved version.
      May 9 2022 - GuiBuilderPlus by kurtykurtyboy as an update to GUIBuilder. A new an improved version with more to come.
      There are a significant number of creators/designers that have been started and never completed.
      +++++ STILL UNDER CONSTRUCTION +++++
      P.S. Well that's it from me tonight. I know of at least one other major creator, but cannot recall it's name or the name of the coder, though I think it starts with 'L'. Bound to be a few I've missed, and some I cannot seem to find their first appearance here (Koda, Form Builder, etc), but there may be an obvious reason for that. Will probably rely on feedback from others now that I've got the ball rolling.
      NOTE - If anyone wants to discuss any of these programs above or give some background history, then by all means do so. I will cross-reference (link to) any important comments.
    • By DevMode
      Hello
      I'm using isn autoit studio for a long time and tried to add some plugins, but the existing SDK is very limited
      So I modified the original code
      I added linking external files with the project
      I know that the file name appears in the project tree, but the file is not found in the project folder

       

      ADD Item in Context Menu for add new Linker
      Global $TreeviewContextMenu_Item_Linker = _GUICtrlCreateODMenuItem("Linker", $TreeviewContextMenu_Item8, $smallIconsdll, 998) ;Projektbaum aktualisieren  
      add Event in _InputCheck
      Case $TreeviewContextMenu_Item_Linker _Linker()  
      add _Linker Function for add New Linker and update .isn file
      #Region ; DevMode Func _Linker() If $Offenes_Projekt = "" Then Return -1 If Not IsHWnd($Current_TVExplorer_TreeView) Then Return -1 Local $Treeview = $Current_TVExplorer_TreeView If _GUICtrlTreeView_GetSelection($Treeview) = 0 Then Return $FileSet = FileOpenDialog("Setect Linker",'','Autoit File(*.au3;)|All File(*.*)') If FileExists($FileSet) Then Dim $szDrive, $szDir, $szFName, $szExt _PathSplit($FileSet, $szDrive, $szDir, $szFName, $szExt) $LinkerName = InputBox("Add New Linker","Plese enter Linker Name",$szFName&$szExt) If $LinkerName = "" Then Return _GUICtrlTreeView_AddChild($hWndTreeview, _GUICtrlTreeView_GetFirstItem($hWndTreeview),'=>'&$LinkerName) $NewLinker = $FileSet&'%'&$LinkerName $OldLinkers = IniRead($Pfad_zur_Project_ISN, "ISNPROJECT_TODOLISTDATA", "Linker", "") IniWrite($Pfad_zur_Project_ISN, "ISNPROJECT_TODOLISTDATA", "Linker",$OldLinkers&'|'&$NewLinker) EndIf Sleep(250) $Projektbaum_ist_bereit = 1 EndFunc ;==>_Erstelle_kopie_von_markierter_datei #EndRegion  
      add _LinkerOpen for open file in Editor
      Func _LinkerOpen($LinkerName) $Linkes = IniRead($Pfad_zur_Project_ISN, "ISNPROJECT_TODOLISTDATA", "Linker", "") $sLinker = StringSplit($Linkes,'|') For $p = 1 To $sLinker[0] If $sLinker[$p] = "" Then ContinueLoop $fLinker = StringSplit($sLinker[$p],'%') If $fLinker[0] = 2 And $LinkerName = $fLinker[2] Then Try_to_opten_file($fLinker[1]) EndIf Next EndFunc add Load Linker 
      Func _Load_Project($Foldername) ....... $RDC_Main_Thread = _RDC_Create($Offenes_Projekt, 1, BitOR($FILE_NOTIFY_CHANGE_FILE_NAME, $FILE_NOTIFY_CHANGE_DIR_NAME), 0, $Studiofenster) $RDC_UDFs_Thread = _RDC_Create(_ISN_Variablen_aufloesen($UDFs_Folder), 1, BitOR($FILE_NOTIFY_CHANGE_FILE_NAME, $FILE_NOTIFY_CHANGE_DIR_NAME), 0, $Studiofenster) _Reload_Ruleslots() _Aktualisiere_oder_erstelle_Projektbaum($Offenes_Projekt) _GUICtrlTVExplorer_Expand($hWndTreeview) #Region Load Linker DevMode $Linkes = IniRead($Pfad_zur_Project_ISN, "ISNPROJECT_TODOLISTDATA", "Linker", "") $sLinker = StringSplit($Linkes,'|') For $p = 1 To $sLinker[0] If $sLinker[$p] = "" Then ContinueLoop $fLinker = StringSplit($sLinker[$p],'%') If $fLinker[0] = 2 Then _GUICtrlTreeView_AddChild($hWndTreeview, _GUICtrlTreeView_GetFirstItem($hWndTreeview),'=>'&$fLinker[2]) EndIf Next #EndRegion ;Set focus to the first item in the treeview ...... EndFunc ;==>_Load_Project Func _Update_Treeview() ...... #Region Load Linker DevMode $Linkes = IniRead($Pfad_zur_Project_ISN, "ISNPROJECT_TODOLISTDATA", "Linker", "") $sLinker = StringSplit($Linkes,'|') For $p = 1 To $sLinker[0] If $sLinker[$p] = "" Then ContinueLoop $fLinker = StringSplit($sLinker[$p],'%') If $fLinker[0] = 2 Then _GUICtrlTreeView_AddChild($hWndTreeview, _GUICtrlTreeView_GetFirstItem($hWndTreeview),'=>'&$fLinker[2]) EndIf Next #EndRegion EndFunc ;==>_Update_Treeview Also I needed to add some modifications because by clicking on the file in the project tree the item . is deleted
       
      Edit File ISN_Studio_WindowMessages.au3 , Function _ISN_WM_NOTIFY_TVExplorer
      Case -3 ; NM_DBLCLK $Current_TVExplorer_TreeView = $hTV ;~ If $tvData[$Index][28] Then ;~ ExitLoop ;~ EndIf $tPOINT = _WinAPI_GetMousePos(1, $hTV) $tTVHTI = _GUICtrlTreeView_HitTestEx($hTV, DllStructGetData($tPOINT, 1), DllStructGetData($tPOINT, 2)) $hItem = DllStructGetData($tTVHTI, 'Item') If BitAND(DllStructGetData($tTVHTI, 'Flags'), $TVHT_ONITEM) Then $text = _GUICtrlTreeView_GetText($Current_TVExplorer_TreeView, $hItem ) If StringLeft($text,2) = "=>" Then Return _LinkerOpen(StringTrimLeft($text,2)) ; DevMode $path = _TV_GetPath($Index, $hItem) If Not _WinAPI_PathIsDirectory($path) Then _TV_Send(6, $Index, $hItem) EndIf EndIf Edit File ISN_UDF_TVExplorer.au3 , Function _TV_Send
      Func _TV_Send($iDummy, $iIndex, $hItem, $fDirect = 0, $lParam = 0) IF BitAND($ISNDebugConsole_SpecialLogs, $ISNDebugConsole_SpecialLogs_TVExplorer) then _Write_ISN_Debug_Console("TVExplorer try to send "&$iDummy&" to index "&$iIndex&" and hItem "&$hItem , $ISN_Debug_Console_Errorlevel_Info) _Write_ISN_Debug_Console("DummyControl Handle: "&$tvData[$iIndex][$iDummy], $ISN_Debug_Console_Errorlevel_Info) Endif Local $wParam = _WinAPI_MakeLong($iDummy, $iIndex) If $hItem <> -1 Then $tvData[$iIndex][$iDummy + 17] = $hItem EndIf If $fDirect Then IF BitAND($ISNDebugConsole_SpecialLogs, $ISNDebugConsole_SpecialLogs_TVExplorer) then _Write_ISN_Debug_Console("TVExplorer try _TV_Dummy with wparam "&$wParam&" and lparam "&$lParam , $ISN_Debug_Console_Errorlevel_Info) _TV_Dummy($wParam, $lParam) Else IF BitAND($ISNDebugConsole_SpecialLogs, $ISNDebugConsole_SpecialLogs_TVExplorer) then _Write_ISN_Debug_Console("TVExplorer try GUICtrlSendToDummy with handle "&$tvData[$iIndex][$iDummy]&" and wparam "&$wParam , $ISN_Debug_Console_Errorlevel_Info) If StringLeft(_GUICtrlTreeView_GetText($Current_TVExplorer_TreeView, $hItem ),2) = "=>" Then Return 1 ; DevMode If Not GUICtrlSendToDummy($tvData[$iIndex][$iDummy], $wParam) Then IF BitAND($ISNDebugConsole_SpecialLogs, $ISNDebugConsole_SpecialLogs_TVExplorer) then _Write_ISN_Debug_Console("TVExplorer _TV_Send STOPPED at GUICtrlSendToDummy! Let´s ReCreate the DummyControls..." , $ISN_Debug_Console_Errorlevel_Warning) _ISN_ReCreateTVExplorerDummyControls($iIndex) If Not GUICtrlSendToDummy($tvData[$iIndex][$iDummy], $wParam) Then IF BitAND($ISNDebugConsole_SpecialLogs, $ISNDebugConsole_SpecialLogs_TVExplorer) then _Write_ISN_Debug_Console("TVExplorer _TV_Send STOPPED again at GUICtrlSendToDummy! ReCreate failed!" , $ISN_Debug_Console_Errorlevel_Critical) Return 0 Endif EndIf EndIf Return 1 EndFunc ;==>_TV_Send  
      Please ISI360 add this feature to the official software
      Also, if possible, add the project to GitHub so that we can help it develop the program
       
      Complied Autoit_Studio.a3x
      Autoit_Studio.a3x
       
       
    • By genius257
      Inspired by PHP's preg_split.
      Split string by a regular expression.
      Also supports the same flags as the PHP equivalent.
      v1.0.1
       
      Example:
      #include "StringRegExpSplit.au3" StringRegExpSplit('splitCamelCaseWords', '(?<=\w)(?=[A-Z])') ; ['split', 'Camel', 'Case', 'Words']  
×
×
  • Create New...