Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 170
  • Last Modified:

Problem parsing a string.

Im parsing a string to add % signs after certain words
Basically if a word is in "double quotes" or 'single quotes' i treat it as a phrase and dont add % to the end
I add % to the end of all other words to make them wildcards for my search.
The problem is that this test string im using wont let me add a % to the last word,

Test string :  Lake ""turtle"" "dog" "cat" 'bat' bat bat12 bat:13 'bat'(horse:bite AND bird (goat OR whale)) NOT Fish
Proper Output:  Lake% ""turtle"" "dog" "cat" 'bat' bat% bat12% bat:13% 'bat'(horse:bite% AND bird% (goat% OR whale%)) NOT Fish%

Here is the code for my project:

        Dim i As Integer
        Dim SearchString, strNew As String
        Dim strAlphaNumeric As String = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'()%*+-:" & Chr(34) & Chr(32)
        Dim strChar As Char

        SearchString = Me.Label1.Text


        'strip out non_alphanumeric characters except for my special ones
        For i = 1 To Len(SearchString)
            strChar = Mid(SearchString, i, 1)
            If InStr(strAlphaNumeric, strChar) Then
                strNew = strNew + strChar
            End If
        Next

        'add % after everyword that isnt in quotes that isnt AND OR NOT or in quotes
        strChar = Nothing
        For i = 1 To Len(strNew)
            ' skip AND, OR, NOT
            If Mid(strNew, i, 3) = "AND" Then
                i = i + 3

            ElseIf Mid(strNew, i, 2) = "OR" Then
                i = i + 2

            ElseIf Mid(strNew, i, 3) = "NOT" Then
                i = i + 3

            ElseIf Mid(strNew, i, 1) Like ("[A-Z]") Or Mid(strNew, i, 1) Like ("[a-z]") Or Mid(strNew, i, 1) Like ("#") Then
                'chr(40) = "("     chr(41) = ")"       chr(32) = " "
                If Mid(strNew, i + 1, 1) = Chr(32) Or Mid(strNew, i + 1, 1) = Chr(40) Or Mid(strNew, i + 1, 1) = Chr(41) Then
                    'add %
                    strNew = strNew.Insert(i, "%")
                    i = i + 1
                End If
            End If

        Next

        Me.Label2.Text = strNew

I appreciate any help you guys can give. Thanks,
0
bertino12
Asked:
bertino12
1 Solution
 
cubixSoftwareCommented:
Try


dim components() as string
dim s as string

componenets  = Split(Label1.Text, " ")

for each s in components
  if not s.EndsWith(Chr(34)) AndAlso not s.EndsWith(Chr(xx)) Then    <--- replace xx with whatever it is for single quote
        s = s & "%"
  End If
Next

' now build it all back into one string
dim result as string
For each s in Components
    result = result & " " & s
Next

MsgBox("Search string is : " & trim(result))


Excuse any typos as this has just been typed stright into here rather than via an editor :)


For each
0
 
bertino12Author Commented:
For i = 1 To Len(strNew)


I figured it out. The length of the string is changing as items are added to it. the original condition is stored as a constant and never reevaluated in VB .NET
So, I used a while loop and my code now works fine.
0
 
kodiakbearCommented:
Closed, 250 points refunded.
kb
Experts Exchange Moderator
0
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.

Join & Write a Comment

Featured Post

Keep up with what's happening at Experts Exchange!

Sign up to receive Decoded, a new monthly digest with product updates, feature release info, continuing education opportunities, and more.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now