?
Solved

Problem parsing a string.

Posted on 2006-10-24
4
Medium Priority
?
162 Views
Last Modified: 2010-04-23
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
Comment
Question by:bertino12
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
4 Comments
 
LVL 6

Expert Comment

by:cubixSoftware
ID: 17796461
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
 

Author Comment

by:bertino12
ID: 17798509
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
 
LVL 1

Accepted Solution

by:
kodiakbear earned 0 total points
ID: 17828800
Closed, 250 points refunded.
kb
Experts Exchange Moderator
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: jpaulino
XML Literals are a great way to handle XML files and the community doesn’t use it as much as it should.  An XML Literal is like a String (http://msdn.microsoft.com/en-us/library/system.string.aspx) Literal, only instead of starting and ending with w…
Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
In this video we outline the Physical Segments view of NetCrunch network monitor. By following this brief how-to video, you will be able to learn how NetCrunch visualizes your network, how granular is the information collected, as well as where to f…
Do you want to know how to make a graph with Microsoft Access? First, create a query with the data for the chart. Then make a blank form and add a chart control. This video also shows how to change what data is displayed on the graph as well as form…
Suggested Courses
Course of the Month12 days, 14 hours left to enroll

777 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question