Главная страница
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.053 c
1-1081862089
REA
2004-04-13 17:14
2004.05.02
Интерфейсы


1-1082039150
Franzy
2004-04-15 18:25
2004.05.02
Invalid Pointer Operation после завершения программы


4-1078152750
v][x
2004-03-01 17:52
2004.05.02
Job Object или CreateProcess


8-1075993069
кекс
2004-02-05 17:57
2004.05.02
wave в файлах


1-1082289800
Роман К.
2004-04-18 16:03
2004.05.02
Как сохранить выделенный текст из TRichEdit в файл?