Главная страница
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.022 c
14-1081513957
Rouse_
2004-04-09 16:32
2004.05.02
Пейджерные перлы. :)))


14-1081381010
_none_
2004-04-08 03:36
2004.05.02
во сколько бы вы оценили...


3-1081383362
big_bugzy
2004-04-08 04:16
2004.05.02
Как в трех уровневом приложении получить идентификатор?


14-1080761044
dilvish
2004-03-31 23:24
2004.05.02
Как написать веб-приложение для локальной сети???


1-1082030507
Katya_mgkit
2004-04-15 16:01
2004.05.02
StringGrid