using System using System Text namespace ConsoleApplication1 class Pro

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
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 = 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);
}
sResultString.Append("(");
// формируем итоговую строку
if (iParamLimit > 1)
{
for (int i = 0; i < iParamLimit - 1; i++)
{
sResultString.Append("\"" + saCorrectItems[i] + "*\" or ");
}
}
sResultString.Append("\"" + saCorrectItems[iParamLimit - 1] + "*\")");
return sResultString.ToString(0, sResultString.Length);
}
}
}