|
Cannot get instr function to work .net?
Using VB.net
For some reason, the 'instr' function and the 'string.indexof' is the same.
The problem is that one of the 2 string arguments, is a variable that is passed from the calling subroutine (not the literal characters) and it does not recognise the 'match'.
When I type in the literal characters with " " -- it works ok.
Here is a copy of the line that is not working.
'm' is the positional marker / 'largetxt' the body that is being searched and 'smalltxt' is the string that is being searched for.
intx = InStr(m, mainTxt, smallTxt)
The variable 'smallTxt' is the problem ---- if I have:
intx = InStr(m, mainTxt, "house") --- it works ok
Also ... same thing for:
intx = largeTxt.IndexOf(smallTxt, m)
Cheers
|
|
|
|
|
InStr is only there for converted VB6 code. It's been deprecated. Use string.IndexOf() instead.
Without seeing the contents of the variables, it's impossible to tell you why it isn't working with any confidence. These functions are case-sensitive, so that might be your problem, but...
|
|
|
|
|
Here is a sample for you...
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim maintext As String
Dim smalltext As String
Dim foundpos As Integer
Dim startpos As Integer
startpos = 0
maintext = "Jack and Jill"
smalltext = "and"
foundpos = maintext.IndexOf(smalltext, startpos)
If foundpos > 0 Then
MsgBox("match found at character " & foundpos)
Else
MsgBox("no match found")
End If
End Sub
|
|
|
|
|
Thank you both .
It the 'indexof' function also not working .... it gives a true result may one time in 20 (when I know it is a true hit).
I think there may be a bug in vb.net. It doesn't matter what I do, it comes up with -1 all the time.
|
|
|
|
|
Is there an alternative method ?.... .... I could spend 5 years tyring to get this one working - it's driving me crazy.
|
|
|
|
|
Yes theres INSTR,
If INSTR(Look-in-this-string", "For-This-String") > 0 Then
'REM A Match Was Found
Else
'REM No_Match_Was_Found
End If
and if you assign the result to a variable then the variable will give you the position...
LocationId = INSTR(Look-in-this-string", "For-This-String")
If LocationId > 0 Then
'REM A Match Was Found
Else
'REM No_Match_Was_Found
End If
|
|
|
|
|
.NET is a widely used framework, and looking for the position in a string is something most of us do. If there was a bug, it'd be found by now.
For these types of bugs, the answer is that "SELECT is not broken".
|
|
|
|
|
Did you try the code portion i added in my thread?
I tested it and it works fine...
obviously we can see the word AND is in the string JACK AND JILL.....
It makes me wonder what the ACTUAL strings are that you are comparing.
Maybe you could add them in a thread?
Its highly unlikely that the IndexOf method/function isnot working!
Its quite possible though that your installation of the development environment may have a corrupted file and possibly the next step would be to uninstall and re-install it again.
Still though, maybe you could save some time by adding your strings which your using in the comparision or even to upload the ACTUAL code block which is causing the offence?
Also, if your searching for a single character without specifying the number of consecutive characters to search, then the character must be in UNICODE, maybe that is of relavance?
Finally IndexOf is Zero based, so the FIRST character is position 0 then increases upwards, meaning it does not start with 1 but with zero.
Looking at the string "JACK AND JILL" and searching for a match of "AND" the code block I gave you states a match is found at charcter position 5, which taking it from a zero based index is ACTUALLY chracter 6 when starting from 1...
So maybe as a last resort you could subtract one from your start point (or start at zero anyway) and look for a match you KNOW exists in your string.
|
|
|
|
|
I'll go so far as to guarantee that there is no bug in INSTR or IndexOf.
It may be a match to you, but the function is telling you otherwise.
Without seeing REAL examples of the strings you are searching and the strings you are searching for in them, it's impossible to tell you why you think they work and the computer is saying they don't.
|
|
|
|
|
Is this a "case" problem?
Try converting both strings to either all upper or all lower case:
largeTxt.tolower.IndexOf(smallTxt.tolower, m)
|
|
|
|