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

Вниз

Универсальная функция поиска по маске   Найти похожие ветки 

 
Vigi ©   (2011-05-19 14:28) [0]

Здрасти!
Что то не могу сообразить нужно сделать универсальную функцию поиска в тексте по маске!
текст (массив) будет иметь только числовые значения.

пример:
маска "aabbb"   = 77333 = 44111 и тд.
маска "aaxbb"   = 22033 = 99733 = 11422 и тд.
маска "ababab" = 121212 = 414141 и тд.
маска "xxxbb"  =  12377 = 10344 = 75622 ..

Есть мысли ? или уже есть готовое решение и не нужно выдумывать велосипед ?!


 
DVM ©   (2011-05-19 14:45) [1]


> Есть мысли ? или уже есть готовое решение и не нужно выдумывать
> велосипед ?!

http://regexpstudio.com/TRegExpr/TRegExpr.html


 
MBo ©   (2011-05-19 14:58) [2]


 function MatchesSmartMask(Mask, Value: string): Boolean;
 var
   i: Integer;
   Map: array[Char] of Char;
   ReverseMap: array["0".."9"] of Char;
 begin
   Result := False;
   if Length(Mask) <> Length(Value) then
     Exit;
   FillChar(Map, SizeOf(Map), 0);
   FillChar(ReverseMap, SizeOf(ReverseMap), 0);
   for i := 1 to Length(Mask) do
     if Mask[i] <> "x" then
       if Map[Mask[i]] = #0 then begin
         if ReverseMap[Value[i]] = #0 then begin
           Map[Mask[i]] := Value[i];
           ReverseMap[Value[i]] := Mask[i];
         end
         else if ReverseMap[Value[i]] = Mask[i] then begin
         end
         else
           Exit;
       end
       else if Map[Mask[i]] <> Value[i] then
         Exit;
   Result := True;
 end;

var
 i: Integer;
begin
 for i := 10000 to 20000 do
   if MatchesSmartMask("abxba", IntToStr(i)) then
     Memo1.Lines.Add(IntToStr(i));



 
Медвежонок Пятачок ©   (2011-05-19 15:17) [3]

маска "aabbb"  => "(\d)\1{1}(\d)\2{2}"
маска "aaxbb"  => "(\d)\1{1}\d(\d)\2{2}"

плюс исключить случаи :

aaaaa
и
aaabb
aabbb
aaaaa


 
Vigi ©   (2011-05-19 15:37) [4]


> if MatchesSmartMask("abxba", IntToStr(i)) then      Memo1.
> Lines.Add(IntToStr(i));


Польшое спс все работает !!!!



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

Форум: "Основная";
Текущий архив: 2013.06.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.002 c
2-1352911408
1785
2012-11-14 20:43
2013.06.30
Перемещение выровненных компонентов по TPanel


15-1361175309
xayam
2013-02-18 12:15
2013.06.30
Крещенская вода


15-1361021525
tesseract
2013-02-16 17:32
2013.06.30
Баня МО


15-1360522550
Дмитрий С
2013-02-10 22:55
2013.06.30
Как в линуксе сделать FlushFileBuffers ?


2-1352918954
Anariem
2012-11-14 22:49
2013.06.30
ADOQwerty Delphi6





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский