Забавная задачка... Найти вхождение цифры в строке. #17210


#0 by Macleod
Пример:Есть строка вида "1-5, 7, 10, 15-34, 76-82".Найти, входит ли число 17 в эту строку...Понятно, что одинэсина должна сказать "ага, входит". А вот алгоритм никак не придумывается.
#1 by Cheater
Если СтрЧислоВхождений(МояСтрока,"17")>0 Тогда
#2 by который не честный
1 - не забывай про пробелы, запятые и числа типа 171 или 217
#3 by SpellKeeper
А чем тебя стандартная функция Найти не устраивает? У тебя в строке все числа с разделителями, либо "," либо "-", так что не промажет.
#4 by SpellKeeper
. А числа могут быть трехзначными?
#5 by Natalia
если правильно поняла, нужно проверить что-то вроде соответствия строки маске *1*7* ?
#6 by который не честный
4 - это не комне вопрос... хотя как видишь они могут быть и однозначными, и сколько там буде вхождений единицы?просто немного меняется строка вхожденийСтрЧислоВхождений(МояСтрока," 17-")СтрЧислоВхождений(МояСтрока,"17,")
#7 by Macleod
Хе. Вы не допоняли, господа :)))(1, 2) Где вы увидели в строке число "17"?Число "17" входит в диапазон 15-34.Может так понятней будет. 17 - это номер контейнера. Строка - список номеров контейнеров в заказе. То есть "с первого по пятый, десятый, с пятнадцатого по тридцать четвёртый, с семьдесят шестого по восемьдесят второй". Надо узнать, есть ли семнадцатый контейнер в списке контейнеров заказа.
#8 by Sure2
Оправившись после вчерашнего торжества с новыми силами принялся за работу...Если я правильно понял условия задачи, то (1-5) ничего не поняли :-)То есть: интересует не вхождение подстроки "17" в искомую строку, а то, что либо это число указано явно, либо входит в один интервал (в примере 15-34)Извини, я слишком тупой, но ничего лучшего не могу предложить, как разбирать строку по элементам
#9 by который не честный
тогда нужен полный разбор строки на составляющие, диапазоны разворачивать и тд..
#10 by Diter
1. Находим первое вхождение "-" - нашли диапазон2. "отрезаем" это диапазон от остальной строки.3. получаем значения типа "число" начало и конец диапазона4. сравниваем искомое число с этими двумядвигаемся дальше. В качестве разделителей всегда используем ",".
#11 by Natalia
ну так уже определенно понятнее ))) Определенно нужно строчку по частям разбирать. И не такая уж она и забавная... )))
#12 by Номер 6
Развод
#13 by Gary
(+9) строку в СЗ и в цикле по СЗ заполнить ТЗ диапазонов (Макс, Мин) запихивать. Потом функцию состряпать, возвращающую 1 или 0 :-)
#14 by ValeraVV
#15 by который не честный
втыскивай из строки подстроки от начала идо запятой, проверяй есть ли знак "-" если нет то переводи в число и сравнивай равно оно искомому или нет, иначе вытаскивай числа и смотри попадает ли искомое в диапозон...
#16 by Macleod
Маладца. Именно правильно понял. Представляешь, какие мысли с бодуна приходят :))) Разбирать по элементам - это первое, что пришло в больную голову, но может ещё мысли родятся?Самое смешное начнётся дальше :)))Пример. Есть два заказа, входящие в одну поставку. Чел забивает номера, как в указано. И надо проследить, чтобы номера не пересекались.То есть. Заказ1. "1-5, 6, 9-15", Заказ2. "4, 5, 7, 8, 10-12". При вводе контенеров в заказ2 контейнеры 10, 11, 12 не катят, пототму что уже есть в заказе1.Как такая задачка? :)))
#18 by mclarry
Тогда разворачивать строку "1-5, 6, 9-15" в ",1,2,3,4,5,6,9,10,11,12,13,14,15,", и вторую тоже. Вхождение каждого числа из второй строки искать как Найти( РазвСтрока, ","+ МоеЧисло+ ",")
#19 by БаГ
Не на много сложнее - просто нужна процедура, которая развернет строку с интервалами "1-6,9-11" в строку "1,2,3,4,5,6,9,10,11". А дальше - что угодно!
#20 by NS
(+17) Да... Обновляться надо...
#21 by Sure2
Класс! Работает.
#22 by cathode
(18, 19) ИМХО, разворот по всем значениям не самое лучшее решение: например, в MS Word при печати диапазонов страниц можно указывать незакрытые диапазоны, вроде "-5,10-", т.е. сначала по пятую страницу, а потом с десятой и до конца. Проверка параметрических условий в данном случае гораздо легче и производительнее.
#23 by MetaEditor
16)строка вида "4, 5, 7, 8, 10-12" превращается в строку вида"4,5,7,8,10,11,12" и делается тотже цикл что и для единичного варианта...
#24 by MetaEditor
23) о мля опоздал...
#25 by Gary
Ой, дайте я тоже "померяюсь" :-), все-равно день нерабочий ... Вот мое решение - работает ! Способ использования: создать новую обработку и заменить текст модуля на нижеприведенный.
#26 by Uno
Если диапозоны небольшие, то быстрее искать "-" в строке и разварачивать строку, но если диапозоны большие то тормоза будут жуткие и лечше юзать алгоритм типа 14. Список лучше сортирануть если диапозоны непопорядку идут,и условие на больше поставить чтоб неискать после того как в нем пойдут цифры больше искомой.
#29 by kos
Вот интересно, а можно про контейнера поподробнее...Терминал какой автоматизируешь?
#30 by poi
а regexp ктонить прилеплял к 1с?если есть, киньтесь ссылкой.
#31 by Macleod
Если подробней, в аську... 152077720Тока ближайшие пару часов меня не будет. Не совсем терминал. Оптовая компания, компутерные прибамбасы, поставки из-за бугра фурами.
#32 by alexey galkin
я знаю что есть внешняя компонента рпботающая с regex'амина / должна быть
#34 by 101
баян
#35 by Macleod
Обманываешь, Лёха. Просто думать сейчас не под силу :)))
#36 by KAO
не нужно внешних компонент - достаточно WSH 5.6Пример поиска строки srt по шаблону templfunction TestRE(str,templ) tryendFunction
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям