|
Как выбрать из числа с префиксом число ? | ☑ | ||
---|---|---|---|---|
0
yavasya
10.10.13
✎
10:23
|
Есть номера документов БДЕ000056 мне надо взять 56 для вычислений
Числом получить знаю Х=0+переменная; номера документов можно достать без префикса процедурой сведения о физ.юрлице, но хочу научиться отделять буквы от цифр примерно так= БДЕ000056-БДЕ ))) |
|||
1
Rie
10.10.13
✎
10:24
|
(0) Циклом бежишь по строке и смотришь - буква в этом месте или цифра.
|
|||
2
Чайник Рассела
10.10.13
✎
10:24
|
Найти()
|
|||
3
vde69
модератор
10.10.13
✎
10:25
|
число(сред("БДЕ000056",4))
|
|||
4
1Сергей
10.10.13
✎
10:25
|
//Убрать цифры из строки
Для Идн = 0 по 9 Цикл Стр = СтрЗаменить(Стр, "" + Идн, ""); КонецЦикла |
|||
5
elCust
10.10.13
✎
10:25
|
Если префикс всегда одинаковый, то СтрЗаменить()
|
|||
6
Aleksey T
10.10.13
✎
10:31
|
а букв всегда 3?
Номер=БДЕ000056; НомерЧислом=Число(УзнатьНомер(Прав(Номер,6))); Функция УзнатьНомер(Номер) Возврат ?(Лев(Номер,1)<>"0", Номер, УзнатьНомер(Прав(Номер, СтрДлина(Номер)-1))); КонецФункции |
|||
7
Рэйв
10.10.13
✎
10:33
|
Функция ВыжатьЧисло(Строчка)
Ответ=0; //даже если там будет лежать строка вида "яыва45выва5ыва56" все равно получим 45556 Если ТипЗнч(Строчка)=Тип("Число") Тогда Возврат Строчка; КонецЕсли; Строчка=Строка(Строчка); Длина=СтрДлина(Строчка); Результат=""; Для н=1 По Длина Цикл //собираем циферки Сим=Сред(Строчка,н,1); Если Найти("0123456789",Сим)>0 Тогда Результат=Результат+Сим; КонецЕсли; Конеццикла; Если Результат<>"" Тогда Ответ=Число(Результат); КонецЕсли; Возврат Ответ; КонецФункции |
|||
8
Rie
10.10.13
✎
10:36
|
(7) Не взлетит.
Контрпример - "ФФФ111ЫЫЫ222". |
|||
9
Рэйв
10.10.13
✎
10:37
|
(8)Ну да... это я немного для другого писал:-)
Значит надо до первой цифры, а потом резать |
|||
10
IamAlexy
10.10.13
✎
10:39
|
(8) циклом с последнего символа и пока это цифра - собираешь цифру..
самый надежный способ. |
|||
11
Rie
10.10.13
✎
10:40
|
(10) Смотря какое из чисел надо выбрать - первое или последнее.
|
|||
12
IamAlexy
10.10.13
✎
10:41
|
(11) ну если пошла такая пьянка то регэкспом сформировать массив вхождений чисел и затем обрабатывать либо первое значение массива либо последнее
|
|||
13
Бледно Золотистый
10.10.13
✎
10:44
|
Вообще есть типовая функция - ПолучитьНомерНаПечать
|
|||
14
rmrush
10.10.13
✎
10:46
|
Можете отбирать символы по их коду, у чисел диапазон кодов в пределах [48;57]
ТекСтрока = "АА0912ББС92"; Длина = СтрДлина(ТекСтрока); Результат = ""; Для н = 1 По Длина Цикл ТекСимвол = Сред(ТекСтрока,н,1); Если КодСимвола(ТекСимвол) <= 57 И КодСимвола(ТекСимвол) >= 48 Тогда Результат=Результат+ТекСимвол; КонецЕсли; Конеццикла; Сообщить(Результат); |
|||
15
Rie
10.10.13
✎
10:47
|
(12) Можно и так :-)
|
|||
16
Sabbath
10.10.13
✎
10:47
|
(13) +1 недавно тема была
|
|||
17
IamAlexy
10.10.13
✎
10:48
|
(14) фиг там.. ты на выходе получиш 091292 а нужно 92 :)
нужно в условие добавить иначе Результат = ""; |
|||
18
IamAlexy
10.10.13
✎
10:48
|
+(17) ну или если первое нужно, то есть 0912 то прерывать цикл..
|
|||
19
rmrush
10.10.13
✎
10:49
|
(18) То есть первая часть считается префиксом от того, что есть буквы?
|
|||
20
yavasya
10.10.13
✎
10:50
|
номернапечать знаю
что - то универсальное надо для работы с числами и буквами |
|||
21
yavasya
10.10.13
✎
10:50
|
ответы получил
всем спасибо |
|||
22
rmrush
10.10.13
✎
10:51
|
(17) Ну в этом случае, можно при каждом натыкании на букву зачищать результат, и все будет ок :)
|
|||
23
IamAlexy
10.10.13
✎
10:51
|
(19) вообще то да.
префиксом считается все то что слева от числа. то есть смотришь справа, пока цифры - это числовое значение номера до первой буквы - и далее идет прфикс.. многие бухи накалываются на приколе с номреами типа 00000000001/1 им система кстати радостно до 000000001/9 доводит номер и вуаля - далее номер неуникальный |
|||
24
Wobland
10.10.13
✎
10:57
|
>надо взять 56 для вычислений
первый палец правой руки ставлю на то, что вычисления неправильный |
|||
25
Aleksey T
10.10.13
✎
10:58
|
а если так(неуверен в правильности):
Номерок=""; Длина=СтрДлина(Номер) Для инд=1 по Длина Цикл Попытка Число(Лев(Номер,инд)); Шаг=Лев(Номер,инд); Исключение Шаг=""; КонецПопытки; Номерок=Номерок+Шаг; Номер=Прав(Номер,СтрДлина(номер)-1); КонецЦикла; Номерок=Число(Номерок); Чур не проклинать меня и слать порчу)))) |
|||
26
yavasya
10.10.13
✎
11:03
|
Длина=СтрДлина(Номер)
(номер) что за переменная ? номер=номерДокумента ? |
|||
27
Rie
10.10.13
✎
11:07
|
(26) Номер - это твоя строка, из которой число извлекаешь.
|
|||
28
Serg_1960
10.10.13
✎
11:11
|
Пятница всё-таки :)
А слабо придумать и озвучить самый лаконичный алгоритм выделения цифровой части для строки вида "ПрефиксЦифрыСуффикс", где префикс и суффикс - произвольный набор символов? |
|||
29
yavasya
10.10.13
✎
11:13
|
ТекСтрока = "АА0912ББС92";
Длина = СтрДлина(ТекСтрока); Результат = ""; Для н = 1 По Длина Цикл ТекСимвол = Сред(ТекСтрока,н,1); Если КодСимвола(ТекСимвол) <= 57 И КодСимвола(ТекСимвол) >= 48 Тогда Результат=Результат+ТекСимвол; КонецЕсли; Конеццикла; Сообщить(Результат); не работает, выводит с префиксом |
|||
30
Aleksey T
10.10.13
✎
11:15
|
(28) Четверг((((((
|
|||
31
Rie
10.10.13
✎
11:16
|
(29) Неправда.
|
|||
32
Serg_1960
10.10.13
✎
11:18
|
(30) Ну, я так и говорю: "Завтра, ближе к вечеру, если будет время - посижу, подумаю" :))
|
|||
33
yavasya
10.10.13
✎
11:21
|
Номерок="";
Длина=СтрДлина(Номер) Для инд=1 по Длина Цикл Попытка Число(Лев(Номер,инд)); Шаг=Лев(Номер,инд); Исключение Шаг=""; КонецПопытки; Номерок=Номерок+Шаг; Номер=Прав(Номер,СтрДлина(номер)-1); КонецЦикла; Номерок=Число(Номерок); не работает Встроенная функция может быть использована только в выражении. (Число) Число<<?>>(Лев(Номер,инд)); (Проверка: Толстый клиент (обычное приложение)) |
|||
34
Rie
10.10.13
✎
11:25
|
(33) И ведь действительно - Число() можно использовать только в выражении. А у Вас оно используется как оператор.
Но вообще-то код несколько загадочный. Зачем такие извращения? Чуть измените код из (29) - выходите из цикла по первой не-цифре после цифры - и наступит счастье. |
|||
35
yavasya
10.10.13
✎
11:26
|
ТекСтрока = "АА0912ББС92";
Длина = СтрДлина(ТекСтрока); Результат = ""; Для н = 1 По Длина Цикл ТекСимвол = Сред(ТекСтрока,н,1); Если КодСимвола(ТекСимвол) <= 57 И КодСимвола(ТекСимвол) >= 48 Тогда Результат=Результат+ТекСимвол; КонецЕсли; Конеццикла; Сообщить(Результат); |
|||
36
yavasya
10.10.13
✎
11:26
|
прошу прощения, работает
|
|||
37
Rie
10.10.13
✎
11:26
|
(35) Здесь Вы получите "091292". Вам надо это? Или "0912"?
|
|||
38
yavasya
10.10.13
✎
11:29
|
можно применить
результат=0+результат; |
|||
39
yavasya
10.10.13
✎
11:30
|
код очень понравился
универсальный |
|||
40
Rie
10.10.13
✎
11:30
|
(38) Вопрос в другом. Вам _конечные_ цифры, которые после букв после цифр идут - нужны?
|
|||
41
yavasya
10.10.13
✎
11:33
|
конечные цифры нужны. спасибо за помощь
|
|||
42
yavasya
10.10.13
✎
11:36
|
Если КодСимвола(ТекСимвол) <= 57 И КодСимвола(ТекСимвол) >= 48
думаю буду часто использовать |
|||
43
Aleksey T
10.10.13
✎
11:37
|
(34) ну присвоить какой нибудь переменной и не будет проблемы)
А вообще я уже здесь просто запутался что хотят в итоге из чего что) |
|||
44
1Сергей
10.10.13
✎
11:39
|
(42) проще писать
Если ТекСимвол <= "9" И ТекСимвол >= "0" |
|||
45
Rie
10.10.13
✎
11:40
|
(43) А зачем? Это ж жутко неэффективная конструкция по природе своей (я имею в виду подобный способ выделения числа, а не присваивание).
|
|||
46
yavasya
10.10.13
✎
11:51
|
Тогда какой самый лучший способ выделения числа ?
|
|||
47
1Сергей
10.10.13
✎
11:52
|
(46) Какого числа ? Первого, последнего, среднего. Задавай правильные вопросы, если хочешь получить правильные ответы
|
|||
48
yavasya
10.10.13
✎
12:01
|
455ывывыв481вывыв61111 - любого числа
|
|||
49
Wobland
10.10.13
✎
12:06
|
(48) какого?
|
|||
50
yavasya
10.10.13
✎
12:17
|
из текста содержащие буквы и числа выбрать числа
|
|||
51
Rie
10.10.13
✎
12:26
|
(46) У тебя уже есть хороший способ. Используй его.
|
|||
52
Aleksey T
10.10.13
✎
15:53
|
(50) ну тут уже куча разных методов, выбирай - не хочу.
я вот свой поправил: Номер= "АА0912ББС92"; Номерок=""; Длина=СтрДлина(Номер) Для инд=1 по Длина Цикл Попытка СС=Число(Лев(Номер,1)); Шаг=Лев(Номер,1); Исключение Шаг=""; КонецПопытки; Номерок=Номерок+Шаг; Номер=Прав(Номер,СтрДлина(номер)-1); КонецЦикла; Номерок=Число(Номерок); //Вернет число 091292 |
|||
53
Rie
10.10.13
✎
15:58
|
(52) А зачем использовать Число() в Попытка? Это же долго.
|
|||
54
Aleksey T
10.10.13
✎
16:31
|
(53) Тогда так:
Номер=БДЕ000056; Длина= СтрДлина(Номер); Номерок=""; Для инд=1 по Длина Цикл Шаг=Лев(номер,1); Если Шаг<>"0" ИЛИ Шаг<>"1" ИЛИ Шаг<>"2" ИЛИ Шаг<>"3" ИЛИ Шаг<>"4" ИЛИ Шаг<>"5" ИЛИ Шаг<>"6" ИЛИ Шаг<>"7" ИЛИ Шаг<>"8" ИЛИ Шаг<>"9" Тогда Номер=Прав(Номер,СтрДлина(Номер)-1)); Иначе Номерок=Номерог+Шаг Номер=Прав(Номер,СтрДлина(Номер)-1))); КонецЦикла Номер=Число(номерок); )))))))))))))))) |
|||
55
Лефмихалыч
10.10.13
✎
16:51
|
Процедура YoDawg(НомерСтрокой)
RE = New COMObject("VBScript.RegExp"); RE.Global = истина; RE.IgnoreCase = истина; RE.Multiline = истина; RE.Pattern = "\d+"; Для каждого Match Из RE.Execute(НомерСтрокой) Цикл Сообщить(Match.Value); КонецЦикла; КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |