Вход | Регистрация



Как получить число из кода клиента?

Как получить число из кода клиента?
Я
   tabarigen
 
09.04.18 - 10:38
РИБ.
Есть коды клиента 00-001189, 00-000078

Как из них получить числа 189 и 78??
 
 
   shuhard
 
1 - 09.04.18 - 10:39
(0) нанять программиста (с)
   bolobol
 
2 - 09.04.18 - 10:40
Число(Прав(3))
   Ц_У
 
3 - 09.04.18 - 10:42
МассивЧастей = СтрРазделить("00-001189","",Истина);
КодКлиента = Число(МассивЧастей[1]);
Почему 189?
   Connect
 
4 - 09.04.18 - 10:43
(2) Опередил. Хотя, не ясна задача. Формат кода. Всегда такой? Критерии извлечения нужны.
http://catalog.mista.ru/public/64222/
   bolobol
 
5 - 09.04.18 - 10:46
(3) ТАк-то если, то можно и:
Если  = "00-001189" Тогда 189
ИначеЕсли = "00-000078" Тогда 78
   skafandr
 
6 - 09.04.18 - 10:48
(5)Шикарно,сделал мой день :)
   SleepyHead
 
7 - 09.04.18 - 10:48
(0)

ПрефиксацияОбъектоКлиентСервер.УдалитьЛидирующиеНулиИзНомераОбъекта(ПрефиксацияОбъектовКлиентСервер.УдалитьПрефиксыИзНомераОбъекта(ИсходныйНомерСНулямиИПрочимиБезобразиями,Истина, Истина))
   Connect
 
8 - 09.04.18 - 10:48
Строку в число перевести. Нулики уже уйдут. А почему из 1189 нужно 189, хз. Может, строго, последние три цифры? Тогда (2).
   Connect
 
9 - 09.04.18 - 10:49
(7) БН доволен. =)
   SleepyHead
 
10 - 09.04.18 - 10:50
(9) Ну есть же методы общих модулей для решения этой задачи, его извращаться-то. Я мог и по-другому написать, но автор темы должен страдать в наказание за лень.
 
 Рекламное место пустует
   Connect
 
11 - 09.04.18 - 10:51
Можно, конечно, после перевода строки в число, опять перевести в строку, и посчитать кол-во символов оставшихся в переменную $A. А потом Число(Прав($A)). Ну или не переводить в строку обратно, а включить простую арифметику.
   Connect
 
12 - 09.04.18 - 10:52
(10) Согласен. Не описавшие конкретики задачи должны страдать.
   bolobol
 
13 - 09.04.18 - 10:57
(7) Ухты, пригодилось, надо же!
   Fish
 
14 - 09.04.18 - 11:12
Код в (5) прекрасен и изящен :)
   tabarigen
 
15 - 09.04.18 - 11:13
(2) лойс)) 
функцию Прав() не мог вспомнить
   Connect
 
16 - 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
   Fish
 
19 - 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;
КонецПопытки;
   bolobol
 
23 - 09.04.18 - 11:36
(17) Многа букв, ниасилил. Если кратко, в чём там суть?
   SleepyHead
 
24 - 09.04.18 - 12:41
(23) Изобретение велосипеда с черным джеком и озорными девушками.
   Connect
 
25 - 09.04.18 - 12:56
Что мне Эйлер вспомнился? Зачем? Блин же, совсем другая степь...
   zwei
 
26 - 09.04.18 - 13:37
(17),(18),(20),(22) Истинный 1Сник - семь раз хуяк, один раз в продакшн... Авось заработает.
   Fish
 
27 - 09.04.18 - 13:40
(21) А что обосновывать? Твой код после всех правок из "00-001189" сделает "1189", а у автора в (0) написано, что надо "189".
   Малыш Джон
 
28 - 09.04.18 - 13:45
(27) скорее всего опечатка)

(0) мой БД+Ш:

СтрЗаменить(СокрЛ(СтрЗаменить(СтрЗаменить(ИсходныйКод,"0", " "),"-"," "))," ","0");

:)
   Connect
 
29 - 09.04.18 - 13:47
И всё таки я бы предпочел не магию одноразовую, а постичь суть задачи. Там и понять, как по человечески реализовать.
   Fish
 
30 - 09.04.18 - 13:57
(28) А если попадётся префикс с пробелом? :)
   Малыш Джон
 
31 - 09.04.18 - 13:59
(30) все предусмотрено) он потеряется среди прочих и благополучно сократится
   Малыш Джон
 
32 - 09.04.18 - 14:01
+(31) вот префикс с буквой - это да...
но в исходной задаче таких условий ведь и не стояло
   Connect
 
33 - 09.04.18 - 14:04
https://www.forum.mista.ru/topic.php?id=481725
Не совсем по сабжу, но таки всё же =)
 
 
   Малыш Джон
 
34 - 09.04.18 - 14:19
Вот он, универсальный вариант :)

КодЧисло = 0;
Пока СтрДлина(ИсходныйКод)>0 Цикл
  Попытка
    КодЧисло = Число(ИсходныйКод);
  Исключение
    ИсходныйКод = Сред(ИсходныйКод,2);
  КонецПопытки;
КонецЦикла;
   dezss
 
35 - 09.04.18 - 14:31
(34) вечный цикл детектед, если там есть хоть одна цифра в конце)))
   dezss
 
36 - 09.04.18 - 14:32
(35) + после
КодЧисло = Число(ИсходныйКод);
надо написать
Прервать;
   Малыш Джон
 
37 - 09.04.18 - 14:39
(35) точняяяяяяк
   bolobol
 
38 - 09.04.18 - 15:02
Перепись адинэснегоф...
   tabarigen
 
39 - 09.04.18 - 16:10
(28) так и есть опечатка. нужно 1189
   tabarigen
 
40 - 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
   Connect
 
49 - 09.04.18 - 21:32
(48) 189. Колдуну не ходи.
 
 Рекламное место пустует
   tabarigen
 
50 - 09.04.18 - 22:18
(41) почему же??
это код справочника контрагенты. его заводят только в центральной базе РИБ. в переферии нет ни у кого прав на него.
Чем же меня не устраивает ответ из (2)
   tabarigen
 
51 - 09.04.18 - 22:19
(47) в моем случае это условие можно опустить. контрагенты будут создаваться только в ЦБ, как уже было сказано выше.

код же мне нужно чтоб создать прайс в папке контрагента на фтп
   Малыш Джон
 
52 - 09.04.18 - 22:24
(50) Видишь ли, в чем дело... функция Прав() работает одинаково, независимо от того, в какой базе заводят код...
   Connect
 
53 - 09.04.18 - 22:36
(51) А может оставим уже несчастный код в покое?
https://ru.wikipedia.org/wiki/Артикул
У меня были лузеры, любили править код, да так, что никакие префиксы/объяснения не помогали. Я убрал, визуально, этот системный код везде, и сделал дополнительный реквизит - _Код.
   Tateossian
 
54 - 10.04.18 - 02:02
Откройте для себя божественные регулярки. Алгоритмический парсинг строк - это уровень джуниора.
   vJet
 
55 - 10.04.18 - 03:11
(54) Поддерживаю, вот так "-(\d+)" все замечательно извлечется. Мне уже лень парсить строки без регулярных выражений. Хотя другие плюются.
   Сияющий в темноте
 
56 - 10.04.18 - 09:16
Регулярки заканчиваются,когда есть несколько вариантов
в общем случае,парсинг,это дерево условий,следуя по которому мы находим результат,если дерево превращается в граф,то применение регулярных выражений только усложняет парсинг
   bolobol
 
57 - 10.04.18 - 09:28
(55) Никогда не понимал эту тень от хрена... Что ты с чем тут сложил разделив? Кто тебя поймёт?
   vJet
 
58 - 10.04.18 - 10:15
(57) Эта конструкция означает "Дай мне все цифры после символа -
Рекомендую поигратся здесь https://regexr.com/ задав в поле expression это -(\d+)\w+ а в поле Text данные из (0)
   bolobol
 
59 - 10.04.18 - 10:26
(58) ПОКА 47 < КОДСимв(Сред(Найти(-)) < 57 ЦИКЛ - это и то понятнее, чем то что ты написал. И, самое главное, этот код поймёт та среда разработки, которую мы здесь используем. Тебя кто поймёт? Некий сайт? Или как?
   zwei
 
60 - 10.04.18 - 10:28
(54) Проверь мне электропочту на соответствие RFC, плз.
   vJet
 
61 - 10.04.18 - 10:42
(59) У меня это будет выгрядеть примерно так:
циферкиИзкода = разобратьТекстРегЕксп("00-001189", " -(\d+)", ложь, истина, истина);


Меня поймет тот кто знаком с регулярными выражениями. Технология совсем не сложна в освоении при этом очень облегчает парсинг строк.
   zwei
 
62 - 10.04.18 - 10:44
(61) А ты попробуй разобрать например, html.
   vJet
 
63 - 10.04.18 - 10:50
(62) Зависит от задачи, собрать DOM не получится а вот извлечь нужные данные вполне.
   Deon
 
64 - 10.04.18 - 10:52
(61) В этой функции подкючается ком-объект?
   Serg_1960
 
65 - 10.04.18 - 10:54
(0) Прикалываясь, но это "рабочий" код :)

    КодСимволами = "00-001189"; КодЧислом = 0;
    Выполнить("КодЧислом = -1 * (" + КодСимволами + ");");
    Сообщить(КодЧислом);// 1 189
   bolobol
 
66 - 10.04.18 - 10:54
(61) Да, где текст самой функции? И мы про 1С тут беспокоимся
   zwei
 
67 - 10.04.18 - 11:09
(63) Ок. Есть строка с вложенными тегами, например

<span>text</span><span>text<span>text</span></span>

Вложенность может меняться, могут попадатся теги <br/>. Извлеки, пожалуйста, текст. Регэкспами.
   tabarigen
 
68 - 11.04.18 - 13:17
Функция ЧислоСправа(Стр, К = 0)
   Возврат ?(Цел(КодСимвола(Прав("!" + Стр, К + 1)) / 5 - 10.5), Формат(Число("0" + Прав(Стр, К)), "ЧГ="), ЧислоСправа(Стр, К + 1))
КонецФункции
   tabarigen
 
69 - 11.04.18 - 13:17
Функция ЧислоСправа1(Номер)
   Возврат Формат(Число("0" + Сред(Номер, СтрДлина(СокрП(
   СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Номер
   , "0", " "), "1", " "), "2", " "), "3", " "), "4", " "), "5", " "), "6", " "), "7", " "), "8", " "), "9", " "))) + 1)), "ЧГ=")
КонецФункции
   tabarigen
 
70 - 11.04.18 - 13:17
на инфостарте подсмотрел. может кому пригодится


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует