Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.05.23;
Скачать: CL | DM;

Вниз

Поиск по маске   Найти похожие ветки 

 
snake1977   (2004-05-07 12:06) [0]

Здравствуйте! поскажите, как можно сделать поиск подстроки по маске?, т.е. есть строка "аааббввв" и есть маска "*а*в*", надо соответсвенно вернуть TRUE или FALSE если строка совпадает с маской


 
Курдль ©   (2004-05-07 12:08) [1]

А напрячь фантазию и самому сделать код в 5 строк?


 
snake1977   (2004-05-07 12:08) [2]

в пять строк не получается, фантазии не хватает.
а подсказать сложно?


 
KSergey ©   (2004-05-07 12:14) [3]

Либо используйте компонент регулярных выражений (если надо будет шаблон менять часто), либо неужели и правда трудно подумать? Ищем "a". Если нашли, ищем "в" (в строке после "a". Если нашлось - тогда труе, иначе - фига.

См. ф-ции Pos, PosEx (если D7)


 
snake1977   (2004-05-07 12:16) [4]

ок, я наверное привел плохой пример,
вот по другому
есть строка "абвгдежзиклмн" и маска "*г??ж*л?н"


 
Smithson ©   (2004-05-07 12:18) [5]

TRegExp, есть, по-моему, на торри (www.torry.net)


 
Курдль ©   (2004-05-07 12:22) [6]


> а подсказать сложно?

Не сложно, а бесит!
Если Вы учитесь программировать - сделайте над собой усилие и напрягите мозг! Нарисуйте блок-схему алгоритма, используя метод последовательной детализации (от простого - к сложному). И рано или поздно просветление придет! Советы с форума - это крайний случай, когда не хватает одного штриха, а не всего решения!
А если Вы делаете программу на продажу и пытаетесь нахаляву найти готовый код - это ... [censored]


 
snake1977   (2004-05-07 12:22) [7]

>>Курдль ©
не в обиду, так как на счет 5 строк???? слабо?


 
Курдль ©   (2004-05-07 12:26) [8]


> не в обиду, так как на счет 5 строк???? слабо?

Не слабо! Думаю, что $500 мне хватит, чтобы я отвлекся от дел сегодня.
Предложения о встрече, оплате и проверке решения - мне на мыло.


 
KSergey ©   (2004-05-07 12:26) [9]

Блин, да какая разница какой пример? Если примеры так часто будут меняться - проще взять готовый компонент рег. выражений или может для  таких вот масок есть, ну либо напрягаться...
Ну а что в новом сложного? тот же последовательный поиск, только с проверкой не где-либо (раз вопросы), а через опред. кол-во символов...

Или нужен готовый компонент, я никак не пойму??


 
wal ©   (2004-05-07 12:29) [10]

Когда то писал нечто похожее - разбирайся сам, я уже забыл давно. Там даже комментарии кое-какие есть :).
unit StrFunc;

interface
var DefaultJoker:char;

function StrMaskJoker(Src, Mask: PChar; Joker: Char):boolean;
function StrMask(Src, Mask: PChar):boolean;

implementation

uses SysUtils;

function StrMaskJoker(Src, Mask: PChar; Joker: Char):boolean;
var i,j:Cardinal;
   TempMask:Array[0..255]of char;
   WorkSrc,WorkMask:Pchar;
begin
WorkSrc := Src;
WorkMask:=Mask;
i:=0;
Result:=False;
if Length(Src)<Length(Mask) then Exit; // Маска длиннее строки
if Mask[0]=#0 then Exit; // Маска пустая
while (Mask[i]<>#0)and(Mask[i]=Joker) do
begin
 Inc(i);
end;
if Mask[i]=#0 then // В маске одни джокеры
begin
 Result:=True;
 Exit;
end;
if i=0 then  // Маска начинается не с джокера
begin
 j:=0;
 repeat
  if Src[j]<>Mask[j] then
  begin
   Result:=False;
   Exit;
  end;
  Inc(j);
 until (Mask[j]=Joker)or(Mask[j]=#0);
 if Mask[j]=#0 then  //   В маске нет джокеров
 begin
  Result:=(Src[j]=#0); // Если строка закончилась вместе с маской, то значит строка равна маске
  Exit;
 end;
 WorkSrc:=@Src[j];    // Отбрасываем отработанную часть строки
 WorkMask:=@Mask[j];  // Отбрасываем отработанную часть маски
end;
 i:=0;
 repeat
  Inc(i);
 until (WorkMask[i]<>Joker)or(WorkMask[i]=#0); //Отбрасываем джокеры в начале маски
 if WorkMask[i]=#0 then
 begin
  Result:=True;
  Exit;
 end;
 WorkMask:=@WorkMask[i];
 i:=0;
 repeat
  TempMask[i]:=WorkMask[i];
  Inc(i);
 until (WorkMask[i]=Joker)or (WorkMask[i]=#0);
 TempMask[i]:=#0;
 WorkSrc:=AnsiStrPos(WorkSrc,@TempMask);
 if WorkSrc=nil then Result:=False
                else Result:=StrMaskJoker(WorkSrc,WorkMask,Joker);

end;

function StrMask(Src, Mask: PChar):boolean;
begin
Result:=StrMaskJoker(Src, Mask, DefaultJoker);
end;

initialization
DefaultJoker := "*";

end.


 
snake1977   (2004-05-07 12:30) [11]

>>Курдль ©
у каждого свое мнение на счет ответов с форума, и посказать идею алгоритма, мне например не сложно, если я уже с этим сталкивался, и меня почему то это не бесит в отличии от вас.
Если вы не можете или не хотите отвечать, то беситесь пожалуйста себе потихоньку и молча перед своим компом, а не делайте вид что вы самый тут умный



Страницы: 1 вся ветка

Текущий архив: 2004.05.23;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.022 c
1-1084030723
Крутыш
2004-05-08 19:38
2004.05.23
Как очистить буфер


14-1083091612
RealRascal
2004-04-27 22:46
2004.05.23
Размер объекта в памяти


1-1083942354
неважно
2004-05-07 19:05
2004.05.23
Массив из объектов


14-1083161865
FlankerX
2004-04-28 18:17
2004.05.23
NET Framework


3-1083131925
Vilux
2004-04-28 09:58
2004.05.23
Регулярные выражения в MSSQL