Qokelate 发表于 2012-2-16 04:42:39

原创 发现_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

Qokelate 发表于 2012-2-16 04:44:49

沙发,把字符剪来剪去看着不习惯,期待会正则的用正则实现,应该效率更高些

pusofalse 发表于 2012-2-16 06:42:45

这样呢?~ MsgBox(0, "", PathSplit("c:\a\a\a\a", 1))

Qokelate 发表于 2012-2-16 06:59:14

本帖最后由 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

shenrenba 发表于 2012-2-16 08:56:03

#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

netegg 发表于 2012-2-16 10:34:11

_WinAPI_Path*的几个函数够用了吧

bdancerlc 发表于 2012-2-18 14:18:44

字符串:"E:\按键精灵\插件\大漠插件\大漠插件(易语言).avi"
表达式:"[^\\\.]+"
输出为:
E:
按键精灵
插件
大漠插件
大漠插件(易语言)
avi

Ycxw2008 发表于 2012-2-18 20:26:35

不折腾哪来的激情{:face (411):}

asionwu 发表于 2012-2-26 17:27:30

呵呵,在折腾中学习

afan 发表于 2012-2-26 21:14:11

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]
查看完整版本: 原创 发现_PathSplit()并不高明,于是自己写了个,哈哈