x
Solved

# How to find occurance of string in another string !

Posted on 2000-03-01
Medium Priority
495 Views
Hi

I need to find the 'n'th occurance of a string in a another string. It is possible to use the 'Instr' command in VB but that returns the Integer value of the location of the first occurance of the string.However take the foll. example;

"John is a good boy. John goes to school.John is a very talkative boy.John is 12 years old"

Now this string contains the word "John"
four times. If I have to parse the above mentioned string, how do I find the 3rd occurance of the word "John" in the entire string directly.

Cheers,
Kapil
0
Question by:explorer007

LVL 71

Expert Comment

ID: 2573752
You can use Instr in a loop like this:

Option Explicit

Private Sub Command1_Click()
MsgBox FindOccurence("John is a good boy. John goes to school.John is a very talkative boy.John is 12 years old", _
"John", 3)
End Sub

Private Function FindOccurence(ByVal pstrText As String, _
ByVal pstrSearch As String, _
ByVal pintOccurence) As Integer
Dim intOccurence As Integer
Dim intPos As Integer

intPos = 0
Do While True
intPos = InStr(intPos + 1, pstrText, pstrSearch)
If intPos = 0 Then Exit Function
intOccurence = intOccurence + 1
If intOccurence = pintOccurence Then
FindOccurence = intPos
Exit Function
End If
Loop
End Function
0

LVL 26

Expert Comment

ID: 2573784
If you use vb6

Dim str As String

str = "John is a good boy. John goes to school.John is a very talkative boy.John is 12 years old"

Dim arr

arr = Split(str, "John")
Debug.Print UBound(arr)
Debug.Print "John" & arr(3)
Erase arr

0

LVL 1

Accepted Solution

PatrickVD earned 90 total points
ID: 2573846
Emoreau is right... There isn't a function in the native VB language that does it directly....So looping on Instr is the straighforward solution.

I might have a shorter version for getting the same result but only in 3 statements. Here's the idea :

Function InstrEx( strFind as String , Byval strSource as String, iOccurence as Integer) as Integer

If iOccurence > 1 Then
strSource = Replace(strSource, strFind, (iOccurence - 1) )
End If

InstrEx = Instr(strSource, strFind)

End Function

The idea is that you get exactly the same behaviour as the Instr function itself !

TIP: If you're only searching for the last occurence then you're better of with the InstrRev function which start the search from the end of the string !

0

LVL 3

Expert Comment

ID: 2574047
Try:
Dim T\$, X\$, I As Integer, Occurance As Integer, P As Integer
X\$ = "John"
T\$ = "John is a good boy. John goes to school.John is a very talkative boy.John is 12 years old"
Occurance = 3
P = 1
For I = 1 To Occurance
P = InStr(P + 1, T\$, X\$)
If P = 0 Then Exit For
Next I
0

Author Comment

ID: 2603380
Thanx ...
0

## Featured Post

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.