Opened 2 years ago

Last modified 8 months ago

#3892 assigned Feature Request

Func() Pass Parameter Bynames — at Version 2

Reported by: Jpm Owned by: Jpm
Milestone: Component: AutoIt
Version: Severity: None
Keywords: Cc:

Description (last modified by mLipok)

Instead of skipping parameter not need using a Default keyword
the Func() syntax can be

Func functioname ( [ [Const] [ByRef] $param1, ... ,] [ [ByNames] [ByRef] $optionalpar1 = value, ... ] )

so the function can be for _PathSplit()

#include <Array.au3>
#include <File.au3>

;read in an array only
Local $aPathSplit = _PathSplit_ByNames(@ScriptFullPath) ; , $sDrive, $sDir, $sFileName, $sExtension)
_ArrayDisplay($aPathSplit, "_PathSplit_ByNames of " & @ScriptFullPath)

; read just the folder part
Local $sFolder = ""
_PathSplit_ByNames(@ScriptFullPath, sDir = $sFolder)
MsgBox(0, "Folder", $sFolder)

Func _PathSplit_ByNames($sFilePath, BYNAMES ByRef $sDrive = ByDefault, ByRef $sDir = ByDefault, ByRef $sFileName = ByDefault, ByRef $sExtension = ByDefault)
        Local $aArray = StringRegExp($sFilePath, "^\h*((?:\\\\\?\\)*(\\\\[^\?\/\\]+|[A-Za-z]:)?(.*[\/\\]\h*)?((?:[^\.\/\\]|(?(?=\.[^\/\\]*\.)\.))*)?([^\/\\]*))$", $STR_REGEXPARRAYMATCH)
        If @error Then ; This error should never happen.
                ReDim $aArray[5]
                $aArray[$PATH_ORIGINAL] = $sFilePath
        EndIf
        Local $KEYWORD_BYDEFAULT = 3 ; if AutoItConstants.au3 is not updated
        If IsKeyWord($sDrive) <> $KEYWORD_BYDEFAULT Then $sDrive = $aArray[$PATH_DRIVE]

        Local $sTemp
        If StringLeft($aArray[$PATH_DIRECTORY], 1) == "/" Then
                $sTemp = StringRegExpReplace($aArray[$PATH_DIRECTORY], "\h*[\/\\]+\h*", "\/")
        Else
                $sTemp = StringRegExpReplace($aArray[$PATH_DIRECTORY], "\h*[\/\\]+\h*", "\\")
        EndIf
        $aArray[$PATH_DIRECTORY] = $sTemp

        If IsKeyWord($sDir) <> $KEYWORD_BYDEFAULT Then $sDir = $sTemp
        If IsKeyWord($sFileName) <> $KEYWORD_BYDEFAULT Then $sFileName = $aArray[$PATH_FILENAME]
        If IsKeyWord($sExtension) <> $KEYWORD_BYDEFAULT Then $sExtension = $aArray[$PATH_EXTENSION]

        Return $aArray
EndFunc   ;==>_PathSplit_ByNames

a ByDefault keyword is also usefull if the caller calling with Default is to be handled differently than an parameter being optional

Change History (2)

comment:1 Changed 2 years ago by Jpm

  • Owner set to Jpm
  • Status changed from new to assigned

Fix sent to Jon

comment:2 Changed 2 years ago by mLipok

  • Description modified (diff)
Note: See TracTickets for help on using tickets.