Jump to content

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


Rohopo
 Share

Go to solution Solved by Realm,

Recommended Posts

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
Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • Solution

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. 

Link to comment
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
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...