• 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

        '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


        Me.Label2.Text = strNew

I appreciate any help you guys can give. Thanks,
1 Solution

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

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

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
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.
Closed, 250 points refunded.
Experts Exchange Moderator

Featured Post

Hire Technology Freelancers with Gigs

Work with freelancers specializing in everything from database administration to programming, who have proven themselves as experts in their field. Hire the best, collaborate easily, pay securely, and get projects done right.

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