As mentioned in the comments, note that this is "reviewing" the code in the self-answer:
The Replace
calls effectively implementing the missing RemoveFrom
method isn't needed here. You could add extra brackets to the RegEx
, and just extract the captures you want, but here you know the position and length of what you're skipping, so just use Mid$
. I.e. this:
If Not thisMatch.SubMatches(1) = vbEmpty Then specifier.Alignment = CInt(Replace(CStr(thisMatch.SubMatches(1)), ",", vbNullString))
If Not thisMatch.SubMatches(2) = vbEmpty Then
specifier.identifier = Left(Replace(CStr(thisMatch.SubMatches(2)), ":", vbNullString), 1)
specifier.CustomSpecifier = Replace(CStr(thisMatch.SubMatches(2)), ":" & specifier.identifier, vbNullString)
End If
becomes this:
If Not thisMatch.SubMatches(1) = vbEmpty Then specifier.Alignment = CInt(Mid$(CStr(thisMatch.SubMatches(1)), 2))
If Not thisMatch.SubMatches(2) = vbEmpty Then
specifier.identifier = Mid$(CStr(thisMatch.SubMatches(2)), 2, 1)
specifier.CustomSpecifier = Mid$(CStr(thisMatch.SubMatches(2)), 3)
End If
BUG
To avoid counting wrong for the pedantic case of "{2}{11}{1}..."
, initialise csvIndices
to ","
and search for "," & specifier.Index & ","
.