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
using System;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
public static void Main(string[] args)
{
StringBuilder sSearch = new StringBuilder(" sdf *asd f adf * \" asdf* * врот мне*ноги* ");
Console.WriteLine("Исходная строка: {0}\n", sSearch);
Console.WriteLine("Итоговая строка: {0}", SearchCriteria(sSearch, 0));
}
/*
* Функция подготавливает строку
* для использования в запросе
*
* @param string sSerachString - строка поиска
* @param int iParamLimit - лимит параметров
* @return string - результирующая строка с критериями поиска
*/
public static StringBuilder SearchCriteria(StringBuilder sSearchString, int iParamLimit)
{
if (sSearchString.Length == 0)
{
return sSearchString;
}
char[] cTrimChars = {'"', '*', ' '}; // массив недопустимых символов
int iWordsFound = 1; // количество найденных слов
// удаляем запрещённые символы и лишние пробелы
for (int i = 0; i < sSearchString.Length; i++)
{
if(sSearchString[i] == cTrimChars[0] || sSearchString[i] == cTrimChars[1])
{
sSearchString.Remove(i, 1);
i--;
}
if (i > 0 && sSearchString[i - 1] == cTrimChars[2] && sSearchString[i] == cTrimChars[2])
{
sSearchString.Remove(i - 1, 1);
i--;
}
}
// удаляем пробелы в начале и в конце,
// которые обязательно останутся если они там были
if (sSearchString[0] == cTrimChars[2])
sSearchString.Remove(0, 1);
if (sSearchString[sSearchString.Length - 1] == cTrimChars[2])
sSearchString.Remove(sSearchString.Length - 1, 1);
StringBuilder SearchString = new StringBuilder("(");
StringBuilder sLine = new StringBuilder("\"");
StringBuilder sOr = new StringBuilder("*\" or \"");
StringBuilder sRight = new StringBuilder("*\")");
SearchString.Append(sLine);
SearchString.Append(sSearchString);
// формируем итоговую строку
for (int i = 0; i < SearchString.Length; i++)
{
if (SearchString[i] == cTrimChars[2])
{
iWordsFound++;
if (iWordsFound > iParamLimit && iParamLimit > 0)
{
SearchString.Remove(i, SearchString.Length - i);
break;
}
SearchString.Insert(i, sOr);
i += sOr.Length;
SearchString.Remove(i, 1);
}
}
SearchString.Append(sRight);
return SearchString;
}
}
}