Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.05.23;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.038 c
7-1081528573
Sur
2004-04-09 20:36
2004.05.23
тип микропроцессора


8-1078393469
Lub
2004-03-04 12:44
2004.05.23
OpenGL


9-1073780115
MrAngel
2004-01-11 03:15
2004.05.23
TEXTURE_COORD_ARRAY_STRIDE


1-1084206117
Nicolas1985
2004-05-10 20:21
2004.05.23
Разрешение экрана


14-1083782911
Drakon
2004-05-05 22:48
2004.05.23
Песни о Software





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский