Форум: "Начинающим";
Текущий архив: 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