Solved

Problem parsing a string.

Posted on 2006-10-24
4
155 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
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

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
It was really hard time for me to get the understanding of Delegates in C#. I went through many websites and articles but I found them very clumsy. After going through those sites, I noted down the points in a easy way so here I am sharing that unde…
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

733 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