Jump to content

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


Go to solution Solved by Realm,

Recommended Posts

Posted (edited)

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
Posted

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

  • Solution
Posted

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. 

Posted

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!

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
×
×
  • Create New...