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

Вниз

принадлежит ли значение набору   Найти похожие ветки 

 
J.S.   (2009-03-25 16:23) [0]

Столкнулся с проблемой: необходимо проверить принадлежит ли челочисленное значение набору значений (набор значений представлен строкой вида "1-6, 11, 22-46"). Какие Вы можете посоветовать варианты реализации?.


 
clickmaker ©   (2009-03-25 16:41) [1]

1.посимвольный разбор
2.регулярные выражения


 
Jeer ©   (2009-03-25 16:41) [2]

парсер


 
MBo ©   (2009-03-25 16:42) [3]

3. если диапазон позволяет, перевести строку в set


 
Юрий Зотов ©   (2009-03-25 17:02) [4]

const
 ValidValues = [1..6, 11, 22..46];
var
 Value: byte;
========
if Value in ValidValues then ...


 
Anatoly Podgoretsky ©   (2009-03-25 17:06) [5]

> J.S.  (25.03.2009 16:23:00)  [0]

Посоветую set of char


 
жж   (2009-03-26 00:20) [6]

function IsPartOf(X: Integer; S: string): Boolean;
var
 SL: TStringList;
 N: Integer;
 s1, s2: string;
begin
 Result:=false;
 SL:=TStringList.Create;
 try
   SL.Delimiter:=",";
   SL.DelimitedText:=s;
   for I:=0 to SL.Count - 1 do
   begin
     N:=Pos("-", SL[I]);
     if N = 0
      then Result:=(X = StrToInt(SL[I]))
      else begin
        s1:=Copy(Sl[I], 1, N);
        s2:=Copy(Sl[I], N + 1, Length(SL));
        Result:=X >=StrToInt(s1) and X <=StrToInt(s2);
      end;
     if Result then Break;
   end;
finally
 SL.Free;
end;

ЗЫ
Набивал текст тут, так что не отлажено, обработка ошибочных входных данных, например "1-6, 11, 22а-46" отсутствует, тут уж сам)


 
Германн ©   (2009-03-26 00:34) [7]


> жж   (26.03.09 00:20) [6]

Я бы не стал изобретать некие функции с ограниченной областью применения, пока автор не ответил на [3] и [4].
Или хотя бы вообще вновь появился на форуме. :)


 
жж   (2009-03-26 19:18) [8]


> Германн ©   (26.03.09 00:34) [7]


Да в общем то, недолго.

а по  поводу сетов не совсем ясно - как перевести строку такого формата в сет без парсинга


 
Zeqfreed ©   (2009-03-26 21:04) [9]

def mrange(spec):
         for rng in spec.split(","):
                 if rng.find("-") > -1:
                         min, max = rng.split("-")
                 else:  
                         min, max = [rng] * 2
                 for i in xrange(int (min), int (max) + 1):
                         yield i

for i in range(0, 25):
         if i in mrange("1-6,11,22-24"):
                 print "%d in range" % i


Само изящество :)


 
Германн ©   (2009-03-27 00:46) [10]


> жж   (26.03.09 19:18) [8]
>
>
> > Германн ©   (26.03.09 00:34) [7]
>
>
> Да в общем то, недолго.
>
> а по  поводу сетов не совсем ясно - как перевести строку
> такого формата в сет без парсинга

Парсинг ты уже сделал. Но сам вопрос не ясен. Откуда автор получает эту строку?
Может и парсинг не нужен?
Но без участия в форуме автора - дальнейшее обсуждение не имеет смысла!



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

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

Наверх





Память: 0.46 MB
Время: 0.004 c
3-1220519388
greg123
2008-09-04 13:09
2009.05.10
Можно ли в запросе заменить названия столбцов на их описание?


2-1238403850
Apachi
2009-03-30 13:04
2009.05.10
Идентифицировать объекты


15-1236501951
тимохов-криптор
2009-03-08 11:45
2009.05.10
Веб-сервер на Linux


2-1238434818
yammi
2009-03-30 21:40
2009.05.10
Чем заменить сишный Return в дельфи?


2-1238248106
SP
2009-03-28 16:48
2009.05.10
Обязательно ли писать свой деструктор в таком случае?





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