Wed 19 Sep 2007
Update:Added GetAllSubstrings, rewrote Substring. v 0.0.9 07/31/2008
Update:Added Prepend. v 0.0.8 10/4/2007
Update:Added a Trim wrapper that operates on the buffer. v 0.0.7 10/3/2007
Update: My appologies, some comments were lost when the Blog server took a dive this past week. Sean Burgess had previously commented and a coworker provided an update to the code, which appears below. Current version is 0.0.6 as of 9/28/2007.
Here's a little something I've been working on. It's a script library that offers a few string functions that we would otherwise be able to overload onto the Script data type if it was an actual object built on a base object like in Java, rather than a primitive.
'superString: Option Public Option Declare Class superString 'superString: ''' Freely Distributable with copywrite intact ' Copywrite 2007 - Datatribe Softwerks, Ltd. - Jerome E. Carter, II ''' v 0.0.9 - Jerry Carter 7/31/2008 - added GetAllSubstrings, rewrote Substring to wrap it as it's easier to understand and troubleshoot ''' v0.0.8 - Jerry Carter 10/4/2007 - added Prepend Subroutine ' Should have been obviouse to begin with, but I didn't think of it till I needed it! ' prepends the supplied string to the buffer ''' v 0.0.7 - Jerry Carter 10/3/2007 - added Trim Subroutine. ' Simply wraps the buffer in the Trim command. Reduces complexity of ' code needed externally to perform the operation against the class. ''' v 0.0.6 - correction provided by M Burgo ' Substring was incorrectly finding the last instance of the suffix rather than the first ''' v 0.0.5 - Jerry Carter - 9/19/2007 ' added Sub Strip which operates on the resident buffer. end result available via Text method. ''' superString - by Jerry Carter - 8/31/2007 - v 0.0.4 ' Notes base data types are not derived from an object but are static final primitives ' therefore we can not declare a class like Public Class superString as String and be able to extend String ''' Private Members Private buff As String ' strings are limited to 2GB - should be sufficient for most things ''' Constructor Sub new (initVal As String) Me.buff = initVal End Sub ''' Public Methods ''' '---------------------' ''' Append ''' ' Adds the inbound string to the end of the buffer Public Sub Append(inputStr As String) Me.buff = Me.buff + inputStr End Sub ''' Prepend ' Add the inbound string to the beginning of the buffer Public Sub Prepend(inputStr As String) Me.buff = inputStr + Me.buff End Sub ''' ToList ''' ' Breaks the buffer into an unordered list, removing the delimiter in the process Public Function ToList(delim As String) As Variant Dim tmpList List As String Dim tmpArr As Variant tmpArr = Split(Me.buff,delim) Dim i As Integer For i = 0 To Ubound(tmpArr) tmpList(Cstr(i)) = tmparr(i) Next ToList = tmpList End Function ''' Strip ' Removes the supplied string argument from the buffer. Public Sub Strip(stripStr As String) Me.setText Join(Split(Me.text,stripStr),"") End Sub ''' Text ''' ' returns the buffer as a string Public Function Text() As String Text = Me.buff End Function ''' Length ''' ' returns the total number of characters as a Long Public Function Length() As Long Length = Len(Me.buff) End Function ''' GetAllSubstrings ' returns all instances of the substring found between the supplied prefix and suffix ' e.g. My <%tagged%> markup should produce <%bonus%> material ' returns a list containing "tagged" and "bonus" if <% is the prefix and %> is the suffix Public Function GetAllSubstrings(prefix As String, suffix As String) As Variant On Error Goto eh Dim blist As Variant blist = Me.ToList(prefix) Dim clist List As String If Islist(blist) Then Forall chunk In blist If Instr(chunk,suffix) > 0 Then clist(Listtag(chunk))= Left(chunk,Clng(Instr(chunk,suffix)-1)) End If End Forall Else clist("error") = "A substring list could not be formed with the supplied prefix and suffix" End If GetAllSubstrings = clist Exit Function eh: Msgbox "Error in GetAllSubstrings: " + Error + " at " + Cstr(Erl) Exit Function End Function ''' SubString ''' ' returns the string appearing between the prefix and the suffix Public Function SubString(prefix As String, suffix As String) As String ' Updated 7/31/2008 to take advantage of new function GetAllSubstrings Dim blist As Variant blist = GetAllSubstrings(prefix,suffix) Forall n In blist Substring = n Exit Forall End Forall End Function ''' Slice ''' ' works like java string.slice(startpos,endpos) Public Function Slice(dstart As Long, dend As Long) As String Slice = Mid$(Me.buff, dstart, dend-dstart) End Function ''' SetText ''' ' replaces the buffer with the inbound string Public Sub SetText(newval As String) Me.buff = newval End Sub ''' Contains ''' ' Simple test to see if the parameter is anywhere in the buffer Public Function Contains(strIN As String) As Boolean If Instr(Me.buff,strIN) > 0 Then Contains= True Else Contains = False End If End Function ''' Pos[ition] ''' ' returns the position of a substring is a Long Public Function Pos(strIn As String) As Long Pos = Instr(Me.buff,strIn) End Function '''Trim''' ' performs LS trim on the buffer Public Sub Trim() Me.buff = Trim(Me.buff) End Sub End Class