Jump to content

Unknown number of parameters


czardas
 Share

Recommended Posts

I am aware that this can be done by passing a single array of values as the parameter to a function, but I intend to write some functions which accept an indefinite number of separate integers as parameters. It amounts to the same thing in the end, but the syntax will be different. So here's what I came up with.

#include <Array.au3>

Dim $aParamMagic = _ParamMagic(1,2,3,4,5,6,7,8,9) ; Up to 100 parameters allowed

If @error Then
    MsgBox(0, "Error Code", @error)
Else
    _ArrayDisplay($aParamMagic, "Parameters Passed")
EndIf

Func _ParamMagic($00="",$01="",$02="",$03="",$04="",$05="",$06="",$07="",$08="",$09="", _
    $10="",$11="",$12="",$13="",$14="",$15="",$16="",$17="",$18="",$19="", _
    $20="",$21="",$22="",$23="",$24="",$25="",$26="",$27="",$28="",$29="", _
    $30="",$31="",$32="",$33="",$34="",$35="",$36="",$37="",$38="",$39="", _
    $40="",$41="",$42="",$43="",$44="",$45="",$46="",$47="",$48="",$49="", _
    $50="",$51="",$52="",$53="",$54="",$55="",$56="",$57="",$58="",$59="", _
    $60="",$61="",$62="",$63="",$64="",$65="",$66="",$67="",$68="",$69="", _
    $70="",$71="",$72="",$73="",$74="",$75="",$76="",$77="",$78="",$79="", _
    $80="",$81="",$82="",$83="",$84="",$85="",$86="",$87="",$88="",$89="", _
    $90="",$91="",$92="",$93="",$94="",$95="",$96="",$97="",$98="",$99="")

    Local $aParam[100] = [$00,$01,$02,$03,$04,$05,$06,$07,$08,$09,$10,$11, _
    $12,$13,$14,$15,$16,$17,$18,$19,$20,$21,$22,$23,$24,$25,$26,$27,$28,$29, _
    $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$40,$41,$42,$43,$44,$45,$46,$47, _
    $48,$49,$50,$51,$52,$53,$54,$55,$56,$57,$58,$59,$60,$61,$62,$63,$64,$65, _
    $66,$67,$68,$69,$70,$71,$72,$73,$74,$75,$76,$77,$78,$79,$80,$81,$82,$83, _
    $84,$85,$86,$87,$88,$89,$90,$91,$92,$93,$94,$95,$96,$97,$98,$99]

    For $i = 0 To 99 ; See how many parameters were passed to the func
        If IsString($aParam[$i]) Then ; The first non integer occurs
            ExitLoop
        ElseIf Not IsInt($aParam[$i]) Then
            Return SetError(1, 0, 0)
        EndIf
    Next
    If $i = 0 Then Return SetError(2, 0, 0) ; No valid parameters
    ReDim $aParam[$i] ; Array only needs to contain valid parameters

    ; Do stuff here
    Return $aParam ; Example return variable
EndFunc

Is there another way to do this with AutoIt? The problem is that the code is a bit bulky.

Link to comment
Share on other sites

Look at @NumParams and #forceref for another way of doing it. You'll also get a good idea of how this is done in WinHTTP.au3. Plus, if the 'bulky' thing is an issue then go with the array option, otherwise this is as good as it gets as far as I know.

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

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

×
×
  • Create New...