Текущий архив: 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.47 MB
Время: 0.04 c