【发布时间】:2017-03-25 23:04:56
【问题描述】:
我遇到了一个问题。我做了研究,发现我可以使用 InSTR 函数来搜索字符串中的特定字符。
我要做的是从文件路径中提取文件名。
目前我有
InStr(StrFrom(pName), "\")
这里的问题是,它返回第一次出现的斜杠,而我想得到最后一次出现的斜杠(这样我就可以使用围绕上述代码的“正确”函数来捕获文件名)
感谢任何有关如何获取字符串中最后一个斜杠的帮助!
谢谢!
【问题讨论】:
我遇到了一个问题。我做了研究,发现我可以使用 InSTR 函数来搜索字符串中的特定字符。
我要做的是从文件路径中提取文件名。
目前我有
InStr(StrFrom(pName), "\")
这里的问题是,它返回第一次出现的斜杠,而我想得到最后一次出现的斜杠(这样我就可以使用围绕上述代码的“正确”函数来捕获文件名)
感谢任何有关如何获取字符串中最后一个斜杠的帮助!
谢谢!
【问题讨论】:
Instr 从文本字符串的开头查找,InstrRev 从另一端开始查找。
Public Function FileNameOnly(ByVal FileNameAndPath As String) As String
FileNameOnly = Mid(FileNameAndPath, InStrRev(FileNameAndPath, "\") + 1, Len(FileNameAndPath))
End Function
【讨论】:
MsgBox CreateObject("Scripting.FileSystemObject").GetFileName(CreateObject("Scripting.FileSystemObject").GetAbsolutePathName("<Full Path To File>")) 作为一个衬里 - 虽然不是特别有用(调用 FileSystemObject 两次)。 :)
Application.PathSeparator 而不是 "\" 并赋予它更多通用性 2) 避免双重 FileSystemObject 对象 With CreateObject "Scripting.FileSystemObject")| FileNameOnly = .GetFileName(.GetAbsolutePathName(FileNameAndPath))| End With -
Application.PathSeparator - 这是我试图记住的命令。想不出拯救我生命的措辞。 :)
使用 InStrRev() 从字符串的右侧查找第一个出现的斜线。
https://msdn.microsoft.com/en-us/library/t2ekk41a(v=vs.90).aspx
【讨论】:
假设 StrFrom 是一些用户定义的函数,下面会做你想做的事:
Dim filename as String
Dim path as String
path = StrFrom(pName)
filename = Mid$(path, InstrRev(path, "\") + 1)
请注意,Mid$ 比 Right$ 更易于使用,因为 InstrRev 从字符串左侧返回字符位置。省略 Mid$ 的最后一个参数,从该位置返回字符串的其余部分。
【讨论】: