- Сообщения
- 8,673
- Репутация
- 2,484
Функция позволяет получить массив с разными элементами в пути к файлу:
Возвращаемый массив:
Возвращаемый массив:
Код:
[0] = Исходный путь
[1] = Имя диска
[2] = Путь без имени и расширения файла
[3] = Путь бз расширения файла
[4] = Путь без имени диска
[5] = Имя файла и его расширение
[6] = Имя файла
[7] = Только расширение файла
Код:
;Автор: CreatoR
;Деление пути на части:
;имя диска, путь без имени и расширения файла, путь бз расширения, путь без имени диска,
;имя файла и расширение, имя файла, только расширение файла
#include <Array.au3> ;Только для примера
$sPath = "C:\Test\My Folder\File.zip"
$aPathArr = _PathSplitByRegExp($sPath)
If IsArray($aPathArr) Then
_ArrayDisplay($aPathArr, "Demo of _PathSplitRegExp()")
ElseIf $aPathArr = $sPath Then
MsgBox(64, "Demo of _PathSplitRegExp()", $aPathArr)
Else
MsgBox(48, "Error", "The path is not correct")
EndIf
;===============================================================================
; Function Name: _PathSplitByRegExp()
; Description: Split the path to 8 elements.
; Parameter(s): $sPath - Path to split.
; Requirement(s):
; Return Value(s): On seccess - Array $aRetArray that contain 8 elements:
; $aRetArray[0] = Full path ($sPath)
; $aRetArray[1] = Drive letter
; $aRetArray[2] = Path without FileName and extension
; $aRetArray[3] = Full path without File Extension
; $aRetArray[4] = Full path without drive letter
; $aRetArray[5] = FileName and extension
; $aRetArray[6] = Just Filename
; $aRetArray[7] = Just Extension of a file
;
; On failure - If $sPath not include correct path (the path is not splitable),
; then $sPath returned.
; If $sPath not include needed delimiters, or it's emty,
; then @error set to 1, and returned -1.
;
; Note(s): The path can include backslash as well (exmp: C:/test/test.zip).
;
; Author(s): G.Sandler a.k.a CreatoR (MsCreatoR) - Thanks to amel27 for help with RegExp
;===============================================================================
Func _PathSplitByRegExp($sPath)
If $sPath = "" Or (StringInStr($sPath, "\") And StringInStr($sPath, "/")) Then Return SetError(1, 0, -1)
Local $aRetArray[8], $pDelim = ""
If StringRegExp($sPath, '^(?i)([A-Z]:|\\)(\\[^\\]+)+$') Then $pDelim = "\"
If StringRegExp($sPath, '(?i)(^.*:/)(/[^/]+)+$') Then $pDelim = "//"
If $pDelim = "" Then $pDelim = "/"
If Not StringInStr($sPath, $pDelim) Then Return $sPath
If $pDelim = "\" Then $pDelim &= "\"
$aRetArray[0] = $sPath ;Full path
$aRetArray[1] = StringRegExpReplace($sPath, $pDelim & '.*', $pDelim) ;Drive letter
$aRetArray[2] = StringRegExpReplace($sPath, $pDelim & '[^' & $pDelim & ']*$', '') ;Path without FileName and extension
$aRetArray[3] = StringRegExpReplace($sPath, '\.[^.]*$', '') ;Full path without File Extension
$aRetArray[4] = StringRegExpReplace($sPath, '(?i)([A-Z]:' & $pDelim & ')', '') ;Full path without drive letter
$aRetArray[5] = StringRegExpReplace($sPath, '^.*' & $pDelim, '') ;FileName and extension
$aRetArray[6] = StringRegExpReplace($sPath, '.*' & $pDelim & '|\.[^.]*$', '') ;Just Filename
$aRetArray[7] = StringRegExpReplace($sPath, '^.*\.', '') ;Just Extension of a file
Return $aRetArray
EndFunc