Heenan, Lambert
Lambert.Heenan at aig.com
Tue Apr 4 14:19:47 CDT 2006
Back in my Access 97 days I wrote a "Field()" function which allowed me to
pick off parts of strings using any arbitrary delimiter. I find this handy
when I need to parse a string that uses *different* delimiters, say an
underscore at one point and a comma at another.
Here's the code
Function Field(ByVal strSource As String, strSep As String, intN As Integer)
As Variant
'Purpose:
' Returns the Nth element in a delimited list.
' Input: strSource - the list to search
' strSep - the delimiter of the list - can be more than one
character
' intN - the ordinal value of the element to be returned
'
' Null is returned if either string parameter is null, or intN <=0 or
' If the separator string is not found
'
'Str = Field("Chuck*Roberts","*",1) would return "Chuck".
Dim strResult As String
Dim strSearch As String
Dim i As Long
Dim lSep As Long
Dim lRightChars As Long
lSep = 0: i = 0
If IsNull(strSource) Or strSource = "" Or IsNull(strSep) Or strSep = ""
Or intN <= 0 Then
strResult = ""
Else
strSearch = strSource
While i < intN
lSep = InStr(strSearch, strSep)
If lSep > 0 Then ' we found the delimiter string
i = i + 1 ' count occurrence
If i = intN Then ' this is the one we want
strResult = left$(strSearch, lSep - 1)
End If
' strip off i'th field
strSearch = right(strSearch, Len(strSearch) - (lSep +
Len(strSep) - 1))
Else ' did not find our separator string, so return the
remainder of the string if the count is ok
If i = intN - 1 Then ' we have seen N-1 separator strings,
so this is the field we want
' at the end of the search
string
i = i + 1 ' to terminate the While loop
strResult = strSearch
Else ' there were less than N-1 fields in the input to
return Null
strResult = ""
i = intN
End If
End If
Wend
End If
If strResult = "" Then
Field = Null
Else
Field = strResult
End If
End Function
For your application you could do what you want using it and a simple loop
Dim vResult as Variant
Dim n as Long
n = 1
vResult = Field(someString,"_",n)
While Not IsNull(vResult)
' do something with vResult
n = n + 1
vResult = Field(someString,"_",n)
Wend
HTH
Lambert
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Mark A Matte
Sent: Tuesday, April 04, 2006 1:52 PM
To: accessd at databaseadvisors.com
Subject: Re: [AccessD] Strip out text
Thanks for the offer, but I moved it to another machine with A2k and Split
worked...but If I have to go back to 97...I'll use the instr and mid.
Thanks again for the info.
Mark A. Matte
>From: "Jim DeMarco" <Jdemarco at hudsonhealthplan.org>
>Reply-To: Access Developers discussion and problem
>solving<accessd at databaseadvisors.com>
>To: "Access Developers discussion and problem solving"
><accessd at databaseadvisors.com>
>Subject: Re: [AccessD] Strip out text
>Date: Tue, 4 Apr 2006 13:29:59 -0400
>
>No A97 doesn't support Split, sorry. You can find a Split replacement
>on Codehound.com though and run with that. Another option is to use
>Instr() and Mid() functions to walk through the text. InStr to find
>the location of the trailing underscore and Mid to grab whatever piece
>of text you need (from the beginning of the string or the previous
>Instr location stored in a variable).
>
>Let me know if you need an example (Split's a lot easier though). I
>can probably whip up some pseudo-code if need be.
>
>
>Jim D.
>
>-----Original Message-----
>From: accessd-bounces at databaseadvisors.com
>[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Mark A Matte
>Sent: Tuesday, April 04, 2006 1:18 PM
>To: accessd at databaseadvisors.com
>Subject: Re: [AccessD] Strip out text
>
>Jim,
>
>Thanks for the example...I am using A97...and it does not recognize
>"Split" Am I missing a reference...or need a later version of Access?
>
>Thanks,
>
>Mark A. Matte
>