nikbobo 发表于 2013-8-25 11:41:17

[已解决]StringSplit 如何得到最后一个拆分的字符串?

本帖最后由 nikbobo 于 2013-8-25 16:40 编辑

例子:$Var = "C:\Windows\Explorer.exe"
$a_Var = StringSplit($Var, "\")我的想法是:$Var = "C:\Windows\Explorer.exe"
$a_Var = StringSplit($Var, "\")
$Var2 = $a_Var[$a_Var]可是有几个问题:
1、$Var为空怎么办?
2、$Var不存在需要拆分的字符串怎么办?
3、假如$Var = "C:\Windows",这样拆分出来的是Windows,而不是我想要的xx.exe,怎么办?
4、也许$Var两侧包含英文双引号或英文单引号,怎么办?(如何先去除这些,必须先去除)

其实这个问题,简单来说,就是如何在给定@ScriptFullPath的情况下,将其变成@ScriptName,只不过AU3的宏仅针对脚本本身,而我是希望任何一个文件都可以。

zch11230 发表于 2013-8-25 12:17:50

没太看懂楼主的意思啊 是不是有***.exe就返回 没有就不返回?$var=StringRegExpReplace("C:\Windows\Explorer.exe",".+\\(.+\.exe)","$1")
If @extended Then MsgBox (0,"",$var)

lpxx 发表于 2013-8-25 12:40:20

我猜测你是想获取路径最后的文件名和扩展名,正则实现的话(?:^.*)\\(.*)$非要用StringSplit的话$Var = "C:\WINDOWS\system32\inetsrv\iis.msc"
$a_Var = StringSplit($Var, "\",2)
MsgBox(0,0,$a_Var)

afan 发表于 2013-8-25 12:44:18

正则肯定要方便些~MsgBox(0, '', _FileGetNameFromPath('C:\Windows\Explorer.exe'))

Func _FileGetNameFromPath($sPath)
        Local $sName = StringRegExpReplace($sPath, '.*?([^\\]*?[^\\\s][^\\]*?$)', '$1')
        If Not @extended Then Return SetError(1, 0, '')
        Return $sName
EndFunc   ;==>_FileGetNameFromPath

netegg 发表于 2013-8-25 13:43:25

本帖最后由 netegg 于 2013-8-25 13:57 编辑

#Include <WinAPIEx.au3>
如果只要后缀的话
_WinAPI_PathFindExtension
字符串为空的话
_WinAPI_PathFindNextComponent
要文件名的话
_WinAPI_PathFindFileName
还有,那第三个问题是处理文件夹路径根本不包含文件名
要哪个用哪个,大不了加个条件判断

nikbobo 发表于 2013-8-25 13:56:13

本帖最后由 nikbobo 于 2013-8-25 14:01 编辑

回复 4# afan


1、$Var为空怎么办?
2、$Var不存在需要拆分的字符串怎么办?
3、假如$Var = "C:\Windows",这样拆分出来的是Windows,而不是我想要的xx.exe,怎么办?

这三个问题没解决。
如果出现这三个问题,我需要的是返回空。

nikbobo 发表于 2013-8-25 14:00:18

回复 5# netegg


同样也没解决:#Include <WinAPIEx.au3>
$sPath = "C:\Windows"
$Test = _WinAPI_PathFindFileName ( $sPath )
MsgBox(262144,'Debug line ~' & @ScriptLineNumber,'Selection:' & @lf & '$Test' & @lf & @lf & 'Return:' & @lf & $Test & @lf & @lf & '@Error:' & @lf & @Error) ;### Debug MSGBOX返回的是Windows。

netegg 发表于 2013-8-25 14:02:08

本帖最后由 netegg 于 2013-8-25 14:07 编辑

问一句,你那个path哪部分是文件名
#Include <WinAPIEx.au3>
#include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>

MsgBox(0,0,_WinAPI_PathFindFileName('C:\Windows\Explorer.exe'))
MsgBox(0,0,_WinAPI_PathFindExtension('C:\Windows\Explorer.exe'))

Global $Str, $Path = 'C:\Windows', $iMemo

_Main()

Func _Main()
    Local $hGUI, $i = 0

    ; 创建界面
    $hGUI = GUICreate("Path Parsing", 400, 300)
    GUISetState()

    ; 创建memo控件
    $iMemo = GUICtrlCreateEdit("", 2, 2, 396, 296, $WS_VSCROLL)
    GUICtrlSetFont($iMemo, 9, 400, 0, "Courier New")

    While $Path > ''
                $i += 1
      MemoWrite($i & " - "& $Path)
      $Path = _WinAPI_PathFindNextComponent($Path)
    WEnd

    ; 循环至用户退出
    Do
    Until GUIGetMsg() = $GUI_EVENT_CLOSE
EndFunc ;==>_Main

; 向memo控件写入信息
Func MemoWrite($sMessage = "")
    GUICtrlSetData($iMemo, $sMessage & @CRLF, 1)
EndFunc ;==>MemoWrite

nikbobo 发表于 2013-8-25 14:04:17

本帖最后由 nikbobo 于 2013-8-25 14:05 编辑

回复 2# zch11230


    对了,但是判断方法能不能改一改。

也不对:$var=StringRegExpReplace("Explorer.exe",".+\\(.+\.exe)","$1")
If @extended Then MsgBox (0,"",$var)就不正常了。

nikbobo 发表于 2013-8-25 14:05:09

回复 8# netegg


    没明白意思。。

netegg 发表于 2013-8-25 14:08:59

本帖最后由 netegg 于 2013-8-25 14:10 编辑

回复 10# nikbobo
windows系统里除了host文件都有后缀名部分
你运行下上面的代码再说

netegg 发表于 2013-8-25 14:16:59

你是不是说只有文件名?

nikbobo 发表于 2013-8-25 14:19:44

回复 11# netegg

没明白什么意思。。。

netegg 发表于 2013-8-25 14:20:05

"C:\Windows"这个字符串哪包含xx.exe了

nikbobo 发表于 2013-8-25 14:23:21

回复 14# netegg


    但是你这个方法,看不明白,不会用。还不如二楼的方法,可是也有缺陷。
页: [1] 2
查看完整版本: [已解决]StringSplit 如何得到最后一个拆分的字符串?