﻿id	summary	reporter	owner	description	type	status	milestone	component	version	severity	resolution	keywords	cc
3892	Func() Pass Parameter Bynames	Jpm	Jon	"Instead of skipping parameter not need using a Default keyword
the Func() syntax can be

{{{#!autoit
Func functioname ( [ [Const] [ByRef] $param1, ... ,] [ [ByNames] [ByRef] $optionalpar1 = value, ... ] )

}}}

so the function can be for _PathSplit()


{{{#!autoit
#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

"	Feature Request	assigned		AutoIt		None			
