Jump to content
Sign in to follow this  
Spenhouet

Read out all functions and a following variable into an array.

Recommended Posts

Spenhouet

Hi Forum.

EDIT because of new needs...:

I want to read out the name of all functions and one variable in it into an array.

for example:

AutoIT:

func example1()
$description = "The first example"
endfunc
func example2()
$description = "The second example"
endfunc

$array[2][2]

$array[0][0] = "example1()"

$array[0][1] = "The first example"

$array[1][0] = "example2()"

$array[1][1] = "The second example"

1. There's a script with functions.

2. There's a script the GUI use to know what to do..

3. There's a GUI script.

.... and there are alot other scripts...

Someone writes a new function in the 1. script. (nothing more only in script 1.)

The script 3. is there to show all functions of script 1. to choose and let a choice run.

To show the existing functions it starts script 2. which returns all functions (and a describing variable) in an array to script 3. which shows them.

The function must only be written and is automatically announced.

clear? can someone help me?

thx

Spenhouet

Edited by Spenhouet

Share this post


Link to post
Share on other sites
hannes08

Hi Spenhouet,

can you show us what you've got so far?

I would loop through your code line for line, extract the function name and from the following lines the first variable.

  • Like 1

Regards,Hannes[spoiler]If you can't convince them, confuse them![/spoiler]

Share this post


Link to post
Share on other sites
jdelaney

Read in the file, and run this:

$atest = StringRegExp ( $sString,"(?i)(?m:^|n)s*Funcs+(w+)s*(|.*$desctiption.*",3 )

*Note, used the function regular expression from George Gedye's PCRE Toolkit

Then you can loop through, where the loop steps 2...that way, $i = Function name, and $i+1 of the array is = description


IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.

Share this post


Link to post
Share on other sites
Spenhouet

can you show us what you've got so far?

I would loop through your code line for line, extract the function name and from the following lines the first variable.

Sounds good. But i found nothing to loop through the code...and nothing to get the following variable.

Any idea?

Read in the file, and run this:

$atest = StringRegExp ( $sString,"(?i)(?m:^|n)s*Funcs+(w+)s*(|.*$desctiption.*",3 )

*Note, used the function regular expression from George Gedye's PCRE Toolkit

Then you can loop through, where the loop steps 2...that way, $i = Function name, and $i+1 of the array is = description

I musst admit that i don't understande anything... what does all this ?i)?m:1|n.... thing mean? and where do i get $sString from...?

Share this post


Link to post
Share on other sites
hannes08

Spenhouet,

there are several ways to loop through a file line for line.

You can either use FilereadLine or _FileReadToArray ... Just look up the functions in the help file.

Use StringInStr() to find strings. Or use what jdelaney wrote: Regular expressions.


Regards,Hannes[spoiler]If you can't convince them, confuse them![/spoiler]

Share this post


Link to post
Share on other sites
Spenhouet

Spenhouet,

there are several ways to loop through a file line for line.

You can either use FilereadLine or _FileReadToArray ... Just look up the functions in the help file.

Use StringInStr() to find strings. Or use what jdelaney wrote: Regular expressions.

The Problem is that i don't want to get it out of a other file. My Code which saves the function name and the variable should be in the same Script as the functions...

And everytime this script runs, it saves the tests to a xml file.

So i need a command that search in the own code...

you say i shoud use the help.. but i did and found nothing.

Share this post


Link to post
Share on other sites
hannes08

If you are using ScITE4AutoIt ( Link ) you can open the helpfile by pressing F1.

use the search or index function of the helpfile.

So just to understand you problem correctly: you want to write some sort of a logfile, right?

As far as I know (and that's not much ;) there is no way to tell what functions and variables are in the script.

If you want to debug your script you need to add some code to every function.


Regards,Hannes[spoiler]If you can't convince them, confuse them![/spoiler]

Share this post


Link to post
Share on other sites
Spenhouet

If you are using ScITE4AutoIt ( Link ) you can open the helpfile by pressing F1.

use the search or index function of the helpfile.

So just to understand you problem correctly: you want to write some sort of a logfile, right?

As far as I know (and that's not much ;) there is no way to tell what functions and variables are in the script.

If you want to debug your script you need to add some code to every function.

haha year i know... xD im newbie in AutoIT but not a noob :)

And like i said... i didn't found something in the help :) -> year i know clearly how it works.. ^^

And no you don't understand it correctly.

My goal is to announce a knew writen function to another AutoIT script.

A log file is also comming but not jet.

But i have no presentable code...because i have no idea to start this action jet..

Share this post


Link to post
Share on other sites
hannes08

My goal is to announce a knew writen function to another AutoIT script.

I stil don't get what you're trying to do.... ;)


Regards,Hannes[spoiler]If you can't convince them, confuse them![/spoiler]

Share this post


Link to post
Share on other sites
Spenhouet

I stil don't get what you're trying to do.... ;)

Ok, i try to explain.

I want to read out the name of all functions and one variable in it into an array.

for example:

AutoIT:

func example1()
$description = "The first example"
endfunc
func example2()
$description = "The second example"
endfunc

$array[2][2]

$array[0][0] = "example1()"

$array[0][1] = "The first example"

$array[1][0] = "example2()"

$array[1][1] = "The second example"

1. There's a script with functions.

2. There's a script the GUI use to know what to do..

3. There's a GUI script.

.... and there are alot other scripts...

Someone writes a new function in the 1. script. (nothing more only in script 1.)

The script 3. is there to show all functions of script 1. to choose and let a choice run.

To show the existing functions it starts script 2. which returns all functions (and a describing variable) in an array to script 3. which shows them.

The function must only be written and is automatically announced.

clear? can someone help me?

thx

Spenhouet

First post is edit.

Edited by Spenhouet

Share this post


Link to post
Share on other sites
jdelaney

Perform a FileRead ( yes, of your script's file...or even make a copy of the script to a seperate file durring run time, and read that in) into the variable = $sString

$atest = StringRegExp ( $sString,"(?i)(?m:^|n)s*Funcs+(w+)s*(|.*$desctiption.*",3 )

Then loop through the array that is returned like I mentioned above.

Edited by jdelaney
  • Like 1

IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.

Share this post


Link to post
Share on other sites
hannes08

I assume that the "other scripts" are uncompiled, right?

I also assume that you have a list of filenames of the other script.

Try a code like this:

_FileReadToArray("path", $aContents)
For $i = 1 To $a_contents[0] - 1
    $iPos1 = StringInStr($aContents[$i], "Func ")
    If  $iPos1 > 0 Then
        $iPos2 = StringInStr($aContents[$i], "(")
        $sFunc = StringMid($a_contents[$i], $iPos1, $iPos2 - $iPos2)
        $iPos3 = StringInStr($aContents[$i + 1], "$description=")
        If $iPos3 > 0 Then
            $sDescription = StringMid($aContents[$i+1], $iPos3 + 13)
        Else
            $sDescription = 0
        EndIf
        ;Add Lines to your array
    Next
Next

I know this could be done way easier with PCRE but I'm not good at it. ;)


Regards,Hannes[spoiler]If you can't convince them, confuse them![/spoiler]

Share this post


Link to post
Share on other sites
Spenhouet

Perform a FileRead ( yes, of your script's file...or even make a copy of the script to a seperate file durring run time, and read that in) into the variable = $sString

$atest = StringRegExp ( $sString,"(?i)(?m:^|n)s*Funcs+(w+)s*(|.*$desctiption.*",3 )

Then loop through the array that is returned like I mentioned above.

Now i understood what you are talking about^^ -.-

I have never seen a regular expression befor.....

I understand what it do but can't get it done by my own... -.-

The thing with Func works realy fine, but the description is not like i want it to be.

$description = "blablabla"

I only need the blablabla. It would be the best if it's also in a new column of the array.

You would realy help me if you can write that for me.

Edited by Spenhouet

Share this post


Link to post
Share on other sites
jdelaney

durring the loop, do some stringinstring, to get a count after the '=', then you can do a stringright of the (stringlen - stringinstring of the = )

Let me know if that doesn't make sense ;)

Edited by jdelaney

IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.

Share this post


Link to post
Share on other sites
Robjong

#include <Array.au3>
$a = _GetFunctionsAndDescriptionVarFromAutoItScriptSourceAndPutThemInA2DArrayPerformMatchingNowPleaseThankYouOhAndJustSoYouKnowThisFunctionReturnsFalseIfItFinds0MatchesAndExpectsTheFirstParameterToBeAutoItScript(FileRead(@ScriptFullPath))
_ArrayDisplay($a)
Func _GetFunctionsAndDescriptionVarFromAutoItScriptSourceAndPutThemInA2DArrayPerformMatchingNowPleaseThankYouOhAndJustSoYouKnowThisFunctionReturnsFalseIfItFinds0MatchesAndExpectsTheFirstParameterToBeAutoItScript($au3source)
    Local Const $description = "It's all in the name"
    Local $aArray = StringRegExp($au3source, "(?im)funch+(w+)h*(.*$s*(?:(?:dim|global|local)?(?:h+const)?)h*$descriptionh*=h*""([^""]+)""", 4)
    If @error Then Return SetError(1, 0, False)
    Local $aSubArray, $iUBound = UBound($aArray), $aReturn[$iUBound][2] = [[$iUBound]]
    For $i = 0 To $iUBound - 1
        $aSubArray = $aArray[$i]
        $aReturn[$i][0] = $aSubArray[1]
        $aReturn[$i][1] = $aSubArray[2]
    Next
    Return $aReturn
EndFunc   ;==>_GetFunctionsAndDescriptionVarFromAutoItScriptSourceAndPutThemInA2DArrayPerformMatchingNowPleaseThankYouOhAndJustSoYouKnowThisFunctionReturnsFalseIfItFinds0MatchesAndExpectsTheFirstParameterToBeAutoItScript

Edited by Robjong
  • Like 1

Share this post


Link to post
Share on other sites
Spenhouet

@Ronjong: WOW a little thank you to you.

Enjoy the show: ;):) :) ;):D:cheer: :cheer: :cheer: :cheer:

You are awesome!

Share this post


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
Sign in to follow this  

  • Similar Content

    • VollachR
      By VollachR
      Hi,
      I'm looking for a way to take a number value from a Row2 of a 2D array and according to this check if files that appear in rows 3-11 in the array exists.
      For example, if the number in Row2 is 5 I need to check for the files in Row 3-6 only, if it is 6 than rows 3-7 and so on.
      I thought on using a FOR loop but I have very little experience with those.
      Can you suggest the best way to do what I need?
      BTW, the files in Rows 3-11 will usually have blank value for any row above the number in Row2 (e.g. Row2 = 5 so Rows3-6 will have values but 8-11 be empty), The values I need are in Column 1 of the array, the name of the key from the INI file that the array was created from is in Column 0.
      Full Example:
      Row2 of Array:
      Col0 = Games# - Col1 = 5
      Rows3-6
      Col0 = Exe2 - Col1 = Path To File
      Col0 = Exe3 - Col1 = Path To File
      Col0 = Exe4 - Col1 = Path To File
      Col0 = Exe5 - Col1 = Path To File
      I need that if Row2 is 5 to check these above for rows if the file exists, if it was 6 then the next row as well and so on up until number 10 in Row2 as it can't go above 10.
      So basically for whatever number in Row2 from 2-10 need to check 1-9 rows from 3-11 to see if the files in Col1 exists and if any of them don't exist it should call a function that shows an error message.
      I'm pretty sure I have the first line of the for look correct:
      For $i = 1 To $aAIO[2][1] Just not sure how to continue from there, also not sure if $i should be equal 1 or 2.
      Help will be appreciated.
    • FMS
      By FMS
      Hello,
      I'm trying to get data from twitter to an array and so far I found an Twitter UDF whish lookes very intresting but couldn't get it to work.
      It lookes not supported any more(2010) and buggy when i read all te replies.
      More around this subject (autoit and twitter) i couldn't find on this forum.
      Is there sombody who know's a good way to get live data from twitter to an array inside autoit?
      (I kinda doubt that this isn't tackled before)
      In the end I was hoping to get all tweets from date to date from an specific subject inside a 2D array to work whit.
    • AndreasNWWWWW
      By AndreasNWWWWW
      I got a question:  i am trying to run different functions based upon what i select in these radio buttons.(code below)
      it needs to check server 1. then run function 1 or function 2 after what i selected in the checkbox.
      once that function is done it moves to the next one, until it has been trough all 5 
       
      iv'e tried using while loops with different while $i equals to something but then i manualy need to go in and edit the script every time.
      #include <ButtonConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region ### START Koda GUI section ### Form= $Form1 = GUICreate("Form1", 615, 437, 192, 124) $Server2 = GUICtrlCreateLabel("Server2", 216, 95, 41, 17) $server1 = GUICtrlCreateLabel("Server1", 216, 72, 41, 17) $server4 = GUICtrlCreateLabel("Server4", 216, 144, 41, 17) $server3 = GUICtrlCreateLabel("Server3", 216, 119, 41, 17) $server5 = GUICtrlCreateLabel("Server5", 216, 170, 41, 17) $Start = GUICtrlCreateButton("Start", 240, 248, 147, 25) $Checkbox1 = GUICtrlCreateCheckbox("function1", 288, 72, 97, 17) $Checkbox2 = GUICtrlCreateCheckbox("function2", 392, 72, 97, 17) $Checkbox3 = GUICtrlCreateCheckbox("function1", 288, 96, 97, 17) $Checkbox4 = GUICtrlCreateCheckbox("function2", 392, 96, 97, 17) $Checkbox5 = GUICtrlCreateCheckbox("function1", 288, 120, 97, 17) $Checkbox6 = GUICtrlCreateCheckbox("function2", 392, 120, 97, 17) $Checkbox7 = GUICtrlCreateCheckbox("function1", 288, 144, 97, 17) $Checkbox8 = GUICtrlCreateCheckbox("function2", 392, 144, 97, 17) $Checkbox9 = GUICtrlCreateCheckbox("function1", 288, 170, 97, 17) $Checkbox10 = GUICtrlCreateCheckbox("function2", 392, 170, 97, 17) GUISetState(@SW_SHOW) #EndRegion ### END Koda GUI section ### While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd  
    • 31290
      By 31290
      Hi everyone, 
      I'm currently writing a script that allow me to list all currently installed software on a computer but some of the are listed in the HKLM64 hive of the registry whereas 95% of all others are in the HKLM "normal" one.
      Thing is, I'd like to combine these two reg key into one single ListView item.
      Here's my code so far, knowing that it's working on both cases (changing to HKLM64 or HKLM short)
      Thanks in advance for the help
      -31290-
    • Iceburg
      By Iceburg
      Hi everyone, I'm at best a noobie.  I have read through the Array helps, and specifically the 2D array help file, and I'm struggling to get my code working.
      I have an array that is read from a file, thats working great.  I'm trying to do some math on the array, so I can find the largest, average, lowest, day over day change %, etc.
      The array read working fine, I get 43 lines, line 0 is 44, and then I get data that looks like
      0519 $10,000
      0520 $10,001
      0521 $10,002
      The data in this array is a single 1D array, breaking it out into 2 columns so I can do the math is what I can get to happen.  
      How do I reference the array to store this data?  Second, how do I assign this data to the appropriate row/column?
      Thanks in advance.
      Dim $all_cash_amounts[UBound($aInput)][2] Dim $max_amount_in_account Dim $min_amount_in_account _FileReadToArray($LC_Check_file_path, $aInput) _ArrayDisplay($aInput) local $date = StringRegExp($aInput[1], "(\d\d\d\d)", 1) local $cash = StringRegExp($aInput[1], "\d+\s(-?[0-9\.\,]+)", 1) ConsoleWrite("Date is: " & $date & @CRLF) For $i = 1 To UBound($aInput)-1     $date = StringRegExp($aInput[$i], "(\d\d\d\d)", 1)     $all_cash_amounts[$i][2] = $date[$i][0], $cash[$i][1]      Next _ArrayDisplay($all_cash_amounts)  
×