原创 发现_PathSplit()并不高明,于是自己写了个,哈哈
本帖最后由 Qokelate 于 2012-2-16 04:46 编辑因某个功能要进行路径拆分,直接把File.au3给Include又觉得太浪费了,因为只用到其中的PathSplit函数,便 想复制出来用,打开后发现并不高明 ,于是自己瞎搞了个,暂时不考虑\\aa\a\a和\\?\a\a\ffbb等非标准路径的情况,学习下正则再加工,欢迎拍砖
Func PathSplit($path, $act = 0)
Local $tmp = StringSplit($path, '\', 1)
Local $File = $tmp[$tmp]
Local $fdr = StringReplace($path, '\' & $File, '')
Switch $act
Case 0
Return $File
Case 1
Return $fdr
Case 3
Return $tmp
EndSwitch
EndFunc ;==>PathSplit
沙发,把字符剪来剪去看着不习惯,期待会正则的用正则实现,应该效率更高些 这样呢?~ MsgBox(0, "", PathSplit("c:\a\a\a\a", 1)) 本帖最后由 Qokelate 于 2012-2-16 07:10 编辑
回复 3# pusofalse
我重点是说明这个思维,这个函数当然是不严谨的,如果非要判断是否目录的话也不难吧,只是觉得用字符修辑并不是一个高效的办法,不过还是要感谢P大,不然还真没发现这个Bug,哈哈
Func PathSplit($path, $act = 0)
$path &= '\>'
Local $tmp = StringSplit($path, '\', 1)
Local $File = $tmp[$tmp - 1]
Local $fdr = StringReplace($path, '\' & $File & '\>', '')
Switch $act
Case 0
Return $File
Case 1
Return $fdr
Case 3
Return $tmp
EndSwitch
EndFunc ;==>PathSplit
#include <WinApiEx.au3>
Func PathSplit($path, $act = 0)
Switch $act
Case 0
Return _WinAPI_PathFindFileName($path)
Case 1
Return StringRegExpReplace($path,"\\[^\\]+$","")
Case 2
Return StringRegExpReplace($path,"\\.+$","")
EndSwitch
EndFunc ;==>PathSplit _WinAPI_Path*的几个函数够用了吧 字符串:"E:\按键精灵\插件\大漠插件\大漠插件(易语言).avi"
表达式:"[^\\\.]+"
输出为:
E:
按键精灵
插件
大漠插件
大漠插件(易语言)
avi 不折腾哪来的激情{:face (411):} 呵呵,在折腾中学习 Func _PathRESplit($szPath, $RtFlag = -1)
;afan提示:默认返回和_PathSplit相同意义的数组;如果 $RtFlag 参数为元素下标则返回其字符串
If Not StringInStr($szPath, ':') Then $szPath = @ScriptDir & '\' & $szPath
$szPath = StringRegExpReplace($szPath, '\\+', '\\')
Local $aSR = StringRegExp($szPath & @LF & $szPath, '(.+)\n(\w:)(\\.*?\\?)([^\\]+?)((?:\.[^.]+)?)$', 3)
If $RtFlag > -1 And $RtFlag < 5 Then Return SetError(@error, '', $aSR[$RtFlag])
Return SetError(@error, '', $aSR)
EndFunc ;==>_PathRESplit
页:
[1]