Coming from the JavaScript world, I’m used to split function working as follow :
"".split(",")
> Array [ "" ]
It’s basic JavaScript. Take an empty string, try to split it on a delimiter, it will return an array containing just one element : an empty string. It’s exactly what you expect from the function, always return an array. Like it should be in every programming language.
A few weeks ago, I had to deal with split function in ASP Classic. Calling the function is a bit different, but that’s not a big deal :
split("foo,bar", ",")
The function works fine in almost every cases. But it has an unexpected behaviour when you use it on an empty string. Let’s try it :
Dim array
array = split("", ",")
'-- Expect array to contain one element
UBound(array) '-- Returns -1. Wait! What?
array(0) '-- Guess what: Internal server error
That’s a problem. The split function does not return an array containing an empty string when you try to split an empty string, it just returns an array with nothing in it – hence UBound returning -1.
When you are aware of this particularity, it’s easier to write your code. Since I personally prefer a JavaScript-like split function, I decided to write a betterSplit function doing the job as I wanted :
'-- Improve Split to work as expected
Function betterSplit(str, delimiter)
Dim ar
ar = Split(str, delimiter)
'-- UBound
'-- < 0 if empty string
'-- = 0 if no delimiter in string
If UBound(ar) <= 0 Then
ReDim ar(0)
ar(0) = str
End If
betterSplit = ar
End Function
As a matter of fact, I find this function much better than the original split function as it always returns an array even when using an empty string as a parameter.