找回密码
 加入
搜索
查看: 3812|回复: 9

[效率算法] 原创 发现_PathSplit()并不高明,于是自己写了个,哈哈

  [复制链接]
发表于 2012-2-16 04:42:39 | 显示全部楼层 |阅读模式
本帖最后由 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[0]]
        Local $fdr = StringReplace($path, '\' & $File, '')
        Switch $act
                Case 0
                        Return $File
                Case 1
                        Return $fdr
                Case 3
                        Return $tmp[1]
        EndSwitch
EndFunc   ;==>PathSplit
 楼主| 发表于 2012-2-16 04:44:49 | 显示全部楼层
沙发,把字符剪来剪去看着不习惯,期待会正则的用正则实现,应该效率更高些
发表于 2012-2-16 06:42:45 | 显示全部楼层
这样呢?~ MsgBox(0, "", PathSplit("c:\a\a\a\a", 1))
 楼主| 发表于 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[0] - 1]
        Local $fdr = StringReplace($path, '\' & $File & '\>', '')
        Switch $act
                Case 0
                        Return $File
                Case 1
                        Return $fdr
                Case 3
                        Return $tmp[1]
        EndSwitch
EndFunc   ;==>PathSplit
发表于 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
发表于 2012-2-16 10:34:11 | 显示全部楼层
_WinAPI_Path*的几个函数够用了吧
发表于 2012-2-18 14:18:44 | 显示全部楼层
字符串:"E:\按键精灵\插件\大漠插件\大漠插件(易语言).avi"
表达式:"[^\\\.]+"
输出为:
[0]E:
[1]按键精灵
[2]插件
[3]大漠插件
[4]大漠插件(易语言)
[5]avi
发表于 2012-2-18 20:26:35 | 显示全部楼层
不折腾哪来的激情
发表于 2012-2-26 17:27:30 | 显示全部楼层
呵呵,在折腾中学习
发表于 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
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-3 15:52 , Processed in 0.078615 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表