Jump to content
Sign in to follow this  
Rohopo

Is there a way to pass multiple numbers to a function as a single parameter?

Recommended Posts

Rohopo

So I've run into a very simple problem. I've looked at what I can think of in the documentation for an answer, and I have searched the forums, but I haven't found a solution just yet (mostly I'm not quite sure the query I should search for in this situation!). I'm really stumped on this one, and I thought maybe you folks could help.

I have a function:

Do
DuckDuckGoose()
exit
until 1





func DuckDuckGoose($duck, $goose)

For $i= 1 to $goose
if $i = $duck then
msgbox(0,"","Duck..")
continueloop
endif
msgbox(0,"","GOOSE!")
Next
endfunc

I'm trying to find a simple way to send numbers to the function, if possible, using the $duck parameter. Basically, I'd like to be able to send something like "1 to 3, 5", and have it skip those numbers in the loop. Anybody know a way I can do this?

Edited by Rohopo

Share this post


Link to post
Share on other sites
guinness

Look at ByRef and arrays.


UDF List:

 
_AdapterConnections()_AlwaysRun()_AppMon()_AppMonEx()_ArrayFilter/_ArrayReduce_BinaryBin()_CheckMsgBox()_CmdLineRaw()_ContextMenu()_ConvertLHWebColor()/_ConvertSHWebColor()_DesktopDimensions()_DisplayPassword()_DotNet_Load()/_DotNet_Unload()_Fibonacci()_FileCompare()_FileCompareContents()_FileNameByHandle()_FilePrefix/SRE()_FindInFile()_GetBackgroundColor()/_SetBackgroundColor()_GetConrolID()_GetCtrlClass()_GetDirectoryFormat()_GetDriveMediaType()_GetFilename()/_GetFilenameExt()_GetHardwareID()_GetIP()_GetIP_Country()_GetOSLanguage()_GetSavedSource()_GetStringSize()_GetSystemPaths()_GetURLImage()_GIFImage()_GoogleWeather()_GUICtrlCreateGroup()_GUICtrlListBox_CreateArray()_GUICtrlListView_CreateArray()_GUICtrlListView_SaveCSV()_GUICtrlListView_SaveHTML()_GUICtrlListView_SaveTxt()_GUICtrlListView_SaveXML()_GUICtrlMenu_Recent()_GUICtrlMenu_SetItemImage()_GUICtrlTreeView_CreateArray()_GUIDisable()_GUIImageList_SetIconFromHandle()_GUIRegisterMsg()_GUISetIcon()_Icon_Clear()/_Icon_Set()_IdleTime()_InetGet()_InetGetGUI()_InetGetProgress()_IPDetails()_IsFileOlder()_IsGUID()_IsHex()_IsPalindrome()_IsRegKey()_IsStringRegExp()_IsSystemDrive()_IsUPX()_IsValidType()_IsWebColor()_Language()_Log()_MicrosoftInternetConnectivity()_MSDNDataType()_PathFull/GetRelative/Split()_PathSplitEx()_PrintFromArray()_ProgressSetMarquee()_ReDim()_RockPaperScissors()/_RockPaperScissorsLizardSpock()_ScrollingCredits_SelfDelete()_SelfRename()_SelfUpdate()_SendTo()_ShellAll()_ShellFile()_ShellFolder()_SingletonHWID()_SingletonPID()_Startup()_StringCompact()_StringIsValid()_StringRegExpMetaCharacters()_StringReplaceWholeWord()_StringStripChars()_Temperature()_TrialPeriod()_UKToUSDate()/_USToUKDate()_WinAPI_Create_CTL_CODE()_WinAPI_CreateGUID()_WMIDateStringToDate()/_DateToWMIDateString()Au3 script parsingAutoIt SearchAutoIt3 PortableAutoIt3WrapperToPragmaAutoItWinGetTitle()/AutoItWinSetTitle()CodingDirToHTML5FileInstallrFileReadLastChars()GeoIP databaseGUI - Only Close ButtonGUI ExamplesGUICtrlDeleteImage()GUICtrlGetBkColor()GUICtrlGetStyle()GUIEventsGUIGetBkColor()Int_Parse() & Int_TryParse()IsISBN()LockFile()Mapping CtrlIDsOOP in AutoItParseHeadersToSciTE()PasswordValidPasteBinPosts Per DayPreExpandProtect GlobalsQueue()Resource UpdateResourcesExSciTE JumpSettings INISHELLHOOKShunting-YardSignature CreatorStack()Stopwatch()StringAddLF()/StringStripLF()StringEOLToCRLF()VSCROLLWM_COPYDATAMore Examples...

Updated: 22/04/2018

Share this post


Link to post
Share on other sites
Realm

Hello Rohopo,

Welcome to the AutoIt Forums :)

There are multiple options on how to achieve what you ask... mostly depending on how you will deliver your parameters to the function.

I made a couple quick and dirty examples.

First as guinness suggest by passing an array to the function:

Local $parameters[3] = [1,3,5]

Do
   DuckDuckGoose2($parameters, 10)
   Exit
Until 1


Func DuckDuckGoose2(ByRef $duck, $goose)

   For $i= 1 to $goose
      For $d = 0 To UBound($duck)-1
         If $i = $duck[$d] Then
            MsgBox(0,'Loop $i = ' & $i,'Duck =' & $duck[$d])
            ContinueLoop
         EndIf
      Next
   MsgBox(0,'Loop $i = ' & $i,"GOOSE!")
   Next
EndFunc

The next would be passing the the parameters in a string and splitting it inside the function. You can use any delimiter, but for this example I chose commas:

Local $duck_parameters = '1,3,5'

Do
   DuckDuckGoose($duck_parameters, 10)
   Exit
Until 1


Func DuckDuckGoose($duck, $goose)
   $aDuck = StringSplit( $duck, ',', 2 ) ;Splits the $duck string into a zero based array
   For $i= 1 to $goose
      For $d = 0 To UBound($aDuck)-1
         If $i = $aDuck[$d] Then
            MsgBox(0,'Loop $i = ' & $i,'Duck =' & $aDuck[$d])
            ContinueLoop
         EndIf
      Next

      MsgBox(0,'Loop $i = ' & $i,'GOOSE!')
   Next
EndFunc

Hope this helps & Happy Coding!

Realm


My Contributions: Unix Timestamp: Calculate Unix time, or seconds since Epoch, accounting for your local timezone and daylight savings time. RegEdit Jumper: A Small & Simple interface based on Yashied's Reg Jumper Function, for searching Hives in your registry.  

Share this post


Link to post
Share on other sites
Rohopo

Hey thanks folks. It really wasn't obvious just looking at the documentation what I should be looking for. This really helps me out! Thanks much!

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  

×