using System;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
public static void Main(string[] args)
{
String sSearch = "sdf *asd f adf * \" asdf* * врот мне*ноги*";
Console.WriteLine("Исходная строка: {0}\n", sSearch);
Console.WriteLine("Итоговая строка: {0}", SearchCriteria(sSearch, 3));
}
/*
* Функция подготавливает строку
* для использования в запросе
*
* @param string sSerachString - строка поиска
* @param int iParamLimit - лимит параметров
* @return string - результирующая строка с критериями поиска
*/
public static string SearchCriteria(String sSearchString, int iParamLimit)
{
char[] cTrimChars = {' ', '"', '*'}; // массив недопустимых символов
// удалим недопустимые символы из строки
for (int i = 1; i < cTrimChars.Length; i++)
{
sSearchString.Replace(cTrimChars[i], cTrimChars[0]);
}
sSearchString.Trim(cTrimChars[0]); // удаляем пробелы по краям для корректной разбивки
string[] saSearchItems = sSearchString.Split(cTrimChars[0]); // массив элементов для поиска
StringBuilder sResultString = new StringBuilder(); // возвращаемая строка поиска
int iEmptyCount = 0; // количество пустых элементов после обработки
// узнаём количество пустых элементов массива
for (int i = 0; i < saSearchItems.Length; i++)
{
if(saSearchItems[i].Length == 0)
iEmptyCount++;
}
string[] saCorrectItems = new string[saSearchItems.Length - iEmptyCount];
int iElemCounter = 0;
// сформируем массив, не содержащий
// пустых элементов
for(int i = 0; i < saSearchItems.Length; i++)
{
if(saSearchItems[i].Length > 0)
saCorrectItems[iElemCounter++] = saSearchItems[i];
}
// если пустой массив - возвращаем пустую строку
if (saCorrectItems.Length == 0)
{
return "";
}
// сформируем верно лимит
if (iParamLimit <= 0)
{
iParamLimit = saCorrectItems.Length;
}
else
{
iParamLimit = (saCorrectItems.Length >= iParamLimit ? iParamLimit : saCorrectItems.Length);
}
StringBuilder sLeft = new StringBuilder("(");
StringBuilder sLine = new StringBuilder("\"");
StringBuilder sOr = new StringBuilder("*\" or ");
StringBuilder sRight = new StringBuilder("*\")");
sResultString.Append(sLeft);
// формируем итоговую строку
if (iParamLimit > 1)
{
for (int i = 0; i < iParamLimit - 1; i++)
{
sResultString.Append(sLine);
sResultString.Append(saCorrectItems[i]);
sResultString.Append(sOr);
}
}
sResultString.Append(sLine);
sResultString.Append(saCorrectItems[iParamLimit - 1]);
sResultString.Append(sRight);
return sResultString.ToString(0, sResultString.Length);
}
}
}