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

Вниз

Сравнение по маске   Найти похожие ветки 

 
Pirate ©   (2004-04-16 09:11) [0]

Есть некая маска (Как в поиске windows) состоящая из:
*-неизвестное кол-во неизвестных символов,
?-1 неизвестный сомвол,
#-одна неизвестная цифра,
и некоторого текста.
Чтото вроде "*вася##фарева?"
и есть ещё строчка- вроде "йцукен(вася45фарева)".
Нужно проверить релевантность строчки к маске.
rel("qwerty*","*rt?")=true
rel("qwery*","*rt?")=false

сколко мучался- не смог.
Может есть аналог функции? Например в бейсике-
function like(s1,s2:string);


 
Anatoly Podgoretsky ©   (2004-04-16 09:26) [1]

MatchesMask


 
Alx2 ©   (2004-04-16 10:28) [2]

>Pirate ©   (16.04.04 09:11)  

Накидал что-то.
Но еще много работы по оптимизации. И особо не тестировал.
Интересно узнать, работает ли она? :))


 Function MathesMask(Const Mask, Sample: String): Boolean;
 Var
   LenMask, LenSample: Integer;

   Function Like(idx, idxSample: Integer): Boolean;

     Function AnySymbol: Boolean;
     Begin
       Result := True;
     End;

     Function AnyDigit: Boolean;
     Begin
       Result := Sample[idxSample] In ["0".."9"];
     End;

   Begin
     Result := (idx > LenMask) And (idxSample > LenSample);
     If Not result Then
       Begin
         Result := (idxSample <= LenSample) And (idx <= LenMask);
         If Result Then
           Case Mask[idx] Of
             "*":
               Result := (Idx = LenMask) Or
                 Like(idx + 1, idxSample + 1) Or
                 ((idxSample < LenSample) And Like(idx, idxSample + 1));
             "?": Result := AnySymbol And Like(idx + 1, idxSample + 1);
             "#": Result := AnyDigit And Like(idx + 1, idxSample + 1);
             Else
               Result := (Mask[idx] = Sample[idxSample]) And Like(idx + 1, idxSample + 1);
           End;
       End;

   End;

 Begin
   LenMask := Length(mask);
   LenSample := Length(Sample);
   Result := (Mask <> "") And Like(1, 1);
 End;



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

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

Наверх




Память: 0.47 MB
Время: 0.048 c
3-1081336377
sergg
2004-04-07 15:12
2004.05.02
Как уменьшить ширину столбцов в DBGride?


1-1082284384
Igrok_
2004-04-18 14:33
2004.05.02
рисование


6-1079023118
Leopold
2004-03-11 19:38
2004.05.02
D6 как оправить сообщение через smtp с уведомлением о доставке ?


7-1076338598
gid
2004-02-09 17:56
2004.05.02
Как определить загруженность процессора в Win XP ?


4-1078377183
-=[SDA]=-
2004-03-04 08:13
2004.05.02
Как узнать версию проекта???