ClanKiller.com
http://forums.clankiller.com/

An easy c# search parsing method
http://forums.clankiller.com/viewtopic.php?f=24&t=2243
Page 1 of 1

Author:  Satis [ Wed Mar 07, 2007 7:39 am ]
Post subject:  An easy c# search parsing method

I wrote this recently to help parse some search text. It's nothing crazily difficult, but basically looks for single and double quotes and breaks the search on it based up. for example, if you search for

this "is a test"

it'll search

WHERE whatever like '%this%' AND whatever like '%is a test%'

I thought I'd share since it's one of the few things I've managed to accomplish lately in the sea of problems I've been swimming in. It converts all single quotes to double quotes, so don't try mixing and matching quotes.

[php]
string where = null;
int i = 0;

//turn single quotes into double quotes
enteredsearch = Regex.Replace(enteredsearch, "[']", "\"");
int loopcontrol = 0;
while (enteredsearch.Contains("\""))
{
//find the first quote
int start_index = enteredsearch.IndexOf("\"");
//find the second quote
int end_index = enteredsearch.IndexOf("\"", start_index + 1);
if (end_index == -1)
{
//if no second quote abort
break;
}
else
{
//get substring
string inside = enteredsearch.Substring(start_index + 1, (end_index - start_index - 1));
if (i > 0)
{
where += " AND";
}
where += " (Question like '%" + inside + "%' OR Answer like '%" + inside + "%')";
//remove quoted section from original query -
//this has the added benefit of replacing identical quoted sections
enteredsearch = enteredsearch.Replace("\"" + inside + "\"", string.Empty);
i++;
}
loopcontrol++;
if (loopcontrol > 10)
{
//we've looped 10 times... this is excessive, so abort the loop
break;
}
}

//take remaining words and add them to the search
if (enteredsearch.Trim().Length > 0)
{
string[] words = enteredsearch.Trim().Split(' ');
for (int k = 0; k < words.Length; k++)
{
if (i > 0 || k > 0)
{
where += " AND";
}
where += " (Question like '%" + words[k] + "%' OR Answer like '%" + words[k] + "%')";
}
}
[/php]

Page 1 of 1 All times are UTC - 6 hours
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/