instr function not accepting arguments VB.net
-
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
-
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...A guide to posting questions on CodeProject[^]
Dave Kreskowiak -
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
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 = 6 'should test not found startpos = 0 'should test matched maintext = "Jack and Jill" smalltext = "and" foundpos = maintext.IndexOf(smalltext, startpos) If foundpos > 0 Then 'found MsgBox("match found at character " & foundpos) Else 'not found MsgBox("no match found") End If End Sub
-
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 = 6 'should test not found startpos = 0 'should test matched maintext = "Jack and Jill" smalltext = "and" foundpos = maintext.IndexOf(smalltext, startpos) If foundpos > 0 Then 'found MsgBox("match found at character " & foundpos) Else 'not found 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.
-
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.
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.
-
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 Ifand 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 -
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.
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.
A guide to posting questions on CodeProject[^]
Dave Kreskowiak -
Is there an alternative method ?.... .... I could spend 5 years tyring to get this one working - it's driving me crazy.
.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".Bastard Programmer from Hell :suss: If you can't read my code, try converting it here[^] They hate us for our freedom![^]
-
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
Is this a "case" problem? Try converting both strings to either all upper or all lower case:
largeTxt.tolower.IndexOf(smallTxt.tolower, m)