|   |   | 
| 
 | Как получить число из кода клиента? | ☑ | ||
|---|---|---|---|---|
| 0
    
        tabarigen 09.04.18✎ 10:38 | 
        РИБ. 
 Есть коды клиента 00-001189, 00-000078 Как из них получить числа 189 и 78?? | |||
| 1
    
        shuhard 09.04.18✎ 10:39 | 
        (0) нанять программиста (с)     | |||
| 2
    
        bolobol 09.04.18✎ 10:40 | 
        Число(Прав(3))     | |||
| 3
    
        Ц_У 09.04.18✎ 10:42 | 
        МассивЧастей = СтрРазделить("00-001189","",Истина);
 КодКлиента = Число(МассивЧастей[1]); Почему 189? | |||
| 4
    
        Connect 09.04.18✎ 10:43 | 
        (2) Опередил. Хотя, не ясна задача. Формат кода. Всегда такой? Критерии извлечения нужны.
 http://catalog.mista.ru/public/64222/ | |||
| 5
    
        bolobol 09.04.18✎ 10:46 | 
        (3) ТАк-то если, то можно и:
 Если = "00-001189" Тогда 189 ИначеЕсли = "00-000078" Тогда 78 | |||
| 6
    
        skafandr 09.04.18✎ 10:48 | 
        (5)Шикарно,сделал мой день :)     | |||
| 7
    
        SleepyHead гуру 09.04.18✎ 10:48 | 
        (0) 
 ПрефиксацияОбъектоКлиентСервер.УдалитьЛидирующиеНулиИзНомераОбъекта(ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(ИсходныйНомерСНулямиИПрочимиБезобразиями,Истина, Истина)) | |||
| 8
    
        Connect 09.04.18✎ 10:48 | 
        Строку в число перевести. Нулики уже уйдут. А почему из 1189 нужно 189, хз. Может, строго, последние три цифры? Тогда (2).     | |||
| 9
    
        Connect 09.04.18✎ 10:49 | 
        (7) БН доволен. =)     | |||
| 10
    
        SleepyHead гуру 09.04.18✎ 10:50 | 
        (9) Ну есть же методы общих модулей для решения этой задачи, его извращаться-то. Я мог и по-другому написать, но автор темы должен страдать в наказание за лень.     | |||
| 11
    
        Connect 09.04.18✎ 10:51 | 
        Можно, конечно, после перевода строки в число, опять перевести в строку, и посчитать кол-во символов оставшихся в переменную $A. А потом Число(Прав($A)). Ну или не переводить в строку обратно, а включить простую арифметику.     | |||
| 12
    
        Connect 09.04.18✎ 10:52 | 
        (10) Согласен. Не описавшие конкретики задачи должны страдать.     | |||
| 13
    
        bolobol 09.04.18✎ 10:57 | 
        (7) Ухты, пригодилось, надо же!     | |||
| 14
    
        Fish гуру 09.04.18✎ 11:12 | 
        Код в (5) прекрасен и изящен :)     | |||
| 15
    
        tabarigen 09.04.18✎ 11:13 | 
        (2) лойс)) 
 функцию Прав() не мог вспомнить | |||
| 16
    
        Connect 09.04.18✎ 11:17 | 
        (14) Да.
 ИначеЕсли ... 8 Иначе Неопределено; | |||
| 17
    
        Куникулус 09.04.18✎ 11:27 | 
        Функция СделатьЦифру(СтрЗнач)
 НовСТр= ""; УдалятьЛидирующиеНули = Истина; Для ном =1 По СтрДлина(СтрЗнач) Цикл ТекСимв = Сред(СтрЗнач, Ном,1); КодТекСимв = КодСимвола(ТекСимв); Если КодТекСимв>=48 или КодТекСимв<=57 Тогда Продолжить; КонецеСли; Если ТекСимв = "0" и УдалятьЛидирующиеНули Тогда Продолжить; Иначе УдалятьЛидирующиеНули = Ложь; КонецеСли; НовСТр = НовСТр +ТекСимв; КонецЦИкла; Попытка РезультЧисло = Число(НовСТр); Исклоючение РезультЧисло = 0; КонецеСЛи; Возврат РезультЧисло; КонецФункции | |||
| 18
    
        Куникулус 09.04.18✎ 11:28 | 
        (17) +
 КодТекСимв>=48 или КодТекСимв<=57 заменить на КодТекСимв>=48 и КодТекСимв<=57 | |||
| 19
    
        Fish гуру 09.04.18✎ 11:28 | 
        (17) Не сработает.     | |||
| 20
    
        Куникулус 09.04.18✎ 11:30 | 
        (18) КодТекСимв>=48 или КодТекСимв<=57 
 заменить на КодТекСимв>=48 и КодТекСимв<=57 заменить на не (КодТекСимв>=48 и КодТекСимв<=57) | |||
| 21
    
        Куникулус 09.04.18✎ 11:30 | 
        (19) Обоснуй     | |||
| 22
    
        Куникулус 09.04.18✎ 11:32 | 
        (20) Исклоючение
 РезультЧисло = 0; КонецеСЛи; Заменить на Исключение РезультЧисло = 0; КонецПопытки; | |||
| 23
    
        bolobol 09.04.18✎ 11:36 | 
        (17) Многа букв, ниасилил. Если кратко, в чём там суть?     | |||
| 24
    
        SleepyHead гуру 09.04.18✎ 12:41 | 
        (23) Изобретение велосипеда с черным джеком и озорными девушками.     | |||
| 25
    
        Connect 09.04.18✎ 12:56 | 
        Что мне Эйлер вспомнился? Зачем? Блин же, совсем другая степь...     | |||
| 26
    
        zwei 09.04.18✎ 13:37 | 
        (17),(18),(20),(22) Истинный 1Сник - семь раз хуяк, один раз в продакшн... Авось заработает.     | |||
| 27
    
        Fish гуру 09.04.18✎ 13:40 | 
        (21) А что обосновывать? Твой код после всех правок из "00-001189" сделает "1189", а у автора в (0) написано, что надо "189".     | |||
| 28
    
        Малыш Джон 09.04.18✎ 13:45 | 
        (27) скорее всего опечатка)
 (0) мой БД+Ш: СтрЗаменить(СокрЛ(СтрЗаменить(СтрЗаменить(ИсходныйКод,"0", " "),"-"," "))," ","0"); :) | |||
| 29
    
        Connect 09.04.18✎ 13:47 | 
        И всё таки я бы предпочел не магию одноразовую, а постичь суть задачи. Там и понять, как по человечески реализовать.     | |||
| 30
    
        Fish гуру 09.04.18✎ 13:57 | 
        (28) А если попадётся префикс с пробелом? :)     | |||
| 31
    
        Малыш Джон 09.04.18✎ 13:59 | 
        (30) все предусмотрено) он потеряется среди прочих и благополучно сократится     | |||
| 32
    
        Малыш Джон 09.04.18✎ 14:01 | 
        +(31) вот префикс с буквой - это да...
 но в исходной задаче таких условий ведь и не стояло | |||
| 33
    
        Connect 09.04.18✎ 14:04 | 
        https://www.forum.mista.ru/topic.php?id=481725
 Не совсем по сабжу, но таки всё же =) | |||
| 34
    
        Малыш Джон 09.04.18✎ 14:19 | 
        Вот он, универсальный вариант :)
 КодЧисло = 0; Пока СтрДлина(ИсходныйКод)>0 Цикл Попытка КодЧисло = Число(ИсходныйКод); Исключение ИсходныйКод = Сред(ИсходныйКод,2); КонецПопытки; КонецЦикла; | |||
| 35
    
        dezss 09.04.18✎ 14:31 | 
        (34) вечный цикл детектед, если там есть хоть одна цифра в конце)))     | |||
| 36
    
        dezss 09.04.18✎ 14:32 | 
        (35) + после
 КодЧисло = Число(ИсходныйКод); надо написать Прервать; | |||
| 37
    
        Малыш Джон 09.04.18✎ 14:39 | 
        (35) точняяяяяяк     | |||
| 38
    
        bolobol 09.04.18✎ 15:02 | 
        Перепись адинэснегоф...     | |||
| 39
    
        tabarigen 09.04.18✎ 16:10 | 
        (28) так и есть опечатка. нужно 1189     | |||
| 40
    
        tabarigen 09.04.18✎ 16:11 | 
        вообще ответ в (2)
 что вы тут базар устроили)) | |||
| 41
    
        Малыш Джон 09.04.18✎ 17:39 | 
        (40) не хочу расстраивать, но если в (0) опечатка и нужно 1189, то ответ не в (2)     | |||
| 42
    
        Мимохожий Однако 09.04.18✎ 17:55 | 
        (41) ОФФ: Не спугни     | |||
| 43
    
        Ц_У 09.04.18✎ 18:26 | 
        (41) угу в (3)     | |||
| 44
    
        Малыш Джон 09.04.18✎ 18:37 | 
        (43) а какой в (3) разделитель?     | |||
| 45
    
        Ц_У 09.04.18✎ 18:39 | 
        (44) ну косяк, да :)     | |||
| 46
    
        Лефмихалыч 09.04.18✎ 19:05 | 
        (0) надо перестать хотеть эту херню делать.
 Зачем? | |||
| 47
    
        Сияющий в темноте 09.04.18✎ 19:37 | 
        Интересно,а 00-000189 и 01-000189 оба дадут 189,никого это не пугает?     | |||
| 48
    
        Лефмихалыч 09.04.18✎ 20:57 | 
        (47) гораздо интересней, что будет, когда алгоритм посетит вот такой
 ПЕ001-006/СТЕ12/ц1 | |||
| 49
    
        Connect 09.04.18✎ 21:32 | 
        (48) 189. Колдуну не ходи.     | |||
| 50
    
        tabarigen 09.04.18✎ 22:18 | 
        (41) почему же??
 это код справочника контрагенты. его заводят только в центральной базе РИБ. в переферии нет ни у кого прав на него. Чем же меня не устраивает ответ из (2) | |||
| 51
    
        tabarigen 09.04.18✎ 22:19 | 
        (47) в моем случае это условие можно опустить. контрагенты будут создаваться только в ЦБ, как уже было сказано выше. 
 код же мне нужно чтоб создать прайс в папке контрагента на фтп | |||
| 52
    
        Малыш Джон 09.04.18✎ 22:24 | 
        (50) Видишь ли, в чем дело... функция Прав() работает одинаково, независимо от того, в какой базе заводят код...     | |||
| 53
    
        Connect 09.04.18✎ 22:36 | 
        (51) А может оставим уже несчастный код в покое?
 https://ru.wikipedia.org/wiki/Артикул У меня были лузеры, любили править код, да так, что никакие префиксы/объяснения не помогали. Я убрал, визуально, этот системный код везде, и сделал дополнительный реквизит - _Код. | |||
| 54
    
        Tateossian 10.04.18✎ 02:02 | 
        Откройте для себя божественные регулярки. Алгоритмический парсинг строк - это уровень джуниора.     | |||
| 55
    
        vJet 10.04.18✎ 03:11 | 
        (54) Поддерживаю, вот так "-(\d+)" все замечательно извлечется. Мне уже лень парсить строки без регулярных выражений. Хотя другие плюются.     | |||
| 56
    
        Сияющий в темноте 10.04.18✎ 09:16 | 
        Регулярки заканчиваются,когда есть несколько вариантов
 в общем случае,парсинг,это дерево условий,следуя по которому мы находим результат,если дерево превращается в граф,то применение регулярных выражений только усложняет парсинг | |||
| 57
    
        bolobol 10.04.18✎ 09:28 | 
        (55) Никогда не понимал эту тень от хрена... Что ты с чем тут сложил разделив? Кто тебя поймёт?     | |||
| 58
    
        vJet 10.04.18✎ 10:15 | 
        (57) Эта конструкция означает "Дай мне все цифры после символа -
 Рекомендую поигратся здесь https://regexr.com/ задав в поле expression это -(\d+)\w+ а в поле Text данные из (0) | |||
| 59
    
        bolobol 10.04.18✎ 10:26 | 
        (58) ПОКА 47 < КОДСимв(Сред(Найти(-)) < 57 ЦИКЛ - это и то понятнее, чем то что ты написал. И, самое главное, этот код поймёт та среда разработки, которую мы здесь используем. Тебя кто поймёт? Некий сайт? Или как?     | |||
| 60
    
        zwei 10.04.18✎ 10:28 | 
        (54) Проверь мне электропочту на соответствие RFC, плз.     | |||
| 61
    
        vJet 10.04.18✎ 10:42 | 
        (59) У меня это будет выгрядеть примерно так: 
 
Меня поймет тот кто знаком с регулярными выражениями. Технология совсем не сложна в освоении при этом очень облегчает парсинг строк. | |||
| 62
    
        zwei 10.04.18✎ 10:44 | 
        (61) А ты попробуй разобрать например, html.     | |||
| 63
    
        vJet 10.04.18✎ 10:50 | 
        (62) Зависит от задачи, собрать DOM не получится а вот извлечь нужные данные вполне.     | |||
| 64
    
        Deon 10.04.18✎ 10:52 | 
        (61) В этой функции подкючается ком-объект?     | |||
| 65
    
        Serg_1960 10.04.18✎ 10:54 | 
        (0) Прикалываясь, но это "рабочий" код :)
 КодСимволами = "00-001189"; КодЧислом = 0; Выполнить("КодЧислом = -1 * (" + КодСимволами + ");"); Сообщить(КодЧислом); // 1 189 | |||
| 66
    
        bolobol 10.04.18✎ 10:54 | 
        (61) Да, где текст самой функции? И мы про 1С тут беспокоимся     | |||
| 67
    
        zwei 10.04.18✎ 11:09 | 
        (63) Ок. Есть строка с вложенными тегами, например
 <span>text</span><span>text<span>text</span></span> Вложенность может меняться, могут попадатся теги <br/>. Извлеки, пожалуйста, текст. Регэкспами. | |||
| 68
    
        tabarigen 11.04.18✎ 13:17 | 
        Функция ЧислоСправа(Стр, К = 0)
 Возврат ?(Цел(КодСимвола(Прав("!" + Стр, К + 1)) / 5 - 10.5), Формат(Число("0" + Прав(Стр, К)), "ЧГ="), ЧислоСправа(Стр, К + 1)) КонецФункции | |||
| 69
    
        tabarigen 11.04.18✎ 13:17 | 
        Функция ЧислоСправа1(Номер)
 Возврат Формат(Число("0" + Сред(Номер, СтрДлина(СокрП( СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Номер , "0", " "), "1", " "), "2", " "), "3", " "), "4", " "), "5", " "), "6", " "), "7", " "), "8", " "), "9", " "))) + 1)), "ЧГ=") КонецФункции | |||
| 70
    
        tabarigen 11.04.18✎ 13:17 | 
        на инфостарте подсмотрел. может кому пригодится     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |