I'm sure we all have helper functions. Those are the little functions we tend to use inside larger sections of code to simply return a specific piece of information for further processing. They are typically short with only a few lines of code in them.
As I was assisting a forum member today, I had to provide a way to extract the file's name from a given file path, so they can copy it to another folder location and rename the file at the same time. Just in case it may help others as well, the following code snippets are some of the several ways to accomplish that task.
This first one simply uses the InStrRev() function to locate the last backslash (\) in the file path to return the file's name.
Public Function iGetFilename(FilePath As String) As String
'thedbguy@gmail.com
'10/1/2021
iGetFilename = Mid(FilePath, InStrRev(FilePath, "\") + 1)
End Function
This next one uses the Split() function to divide the entire file path using the backslash as the slicer and then returns the last item in the array.
Public Function sGetFilename(FilePath As String) As String
'thedbguy@gmail.com
'10/1/2021
Dim strArr() As String
strArr() = Split(FilePath, "\")
sGetFilename = strArr(UBound(strArr))
End Function
I also got to thinking that we might be able to use a RegEx pattern to extract the file's name from the file path, and that's really the reason why I decided to post this blog today. I can't say the pattern I came up with is the best one to use. So, if anyone has a better one, please share it.
Public Function rGetFilename(FilePath As String) As String
'thedbguy@gmail.com
'10/1/2021
Dim regEx As Object
Dim regExMatch As Object
Set regEx = CreateObject("VBScript.RegExp")
With regEx
.IgnoreCase = True
.Pattern = "[^\\]+\.[a-z]{2,5}$"
Set regExMatch = .Execute(FilePath)
End With
If regExMatch.Count > 0 Then
rGetFilename = regExMatch(0).Value
End If
End Function
Additionally, I also found out another way of getting the file name using the FileSystemObject library. It turns out the FSO has many methods available for working with files. Here's an example.
Public Function fGetFilename(FilePath As String) As String
'thedbguy@gmail.com
'10/1/2021
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fGetFilename = fso.GetFilename(FilePath)
Set fso = Nothing
End Function
As always, thank you for reading this and please let me know if you have any comments regarding this topic or any of the code I presented above. Cheers!