|
Преобразование строки в число | ☑ | ||
---|---|---|---|---|
0
BubbleGumm
24.12.14
✎
13:19
|
Подскажите, каким образом БЫСТРО преобразовать число в строку.
Нужно выделить только цифры, разделитель дробной части может быть как точка, так и запятая. Может есть компонента какая нибудь? |
|||
1
Fish
24.12.14
✎
13:20
|
Строка() ?
|
|||
2
BubbleGumm
24.12.14
✎
13:22
|
Тьфу. Наоборот строку в число)
|
|||
3
vicof
24.12.14
✎
13:22
|
Число()? :)
|
|||
4
BubbleGumm
24.12.14
✎
13:23
|
)
|
|||
5
разработчик 1с
24.12.14
✎
13:23
|
Пока истина цикл
кодсимвола() |
|||
6
BubbleGumm
24.12.14
✎
13:24
|
Строка может содержать символы, пробелы, неразрывные пробелы
|
|||
7
BubbleGumm
24.12.14
✎
13:24
|
(5)
Нужно БЫСТРО. Это критично |
|||
8
Drac0
24.12.14
✎
13:27
|
(7) Насколько быстро? Что долгого в варианте (5) ?
|
|||
9
hhhh
24.12.14
✎
13:27
|
(7) если нужно БЫСТРО, сделайте там числовое поле и не парьте нам мозг. Преобразование Число-Число делается очень быстро, практически мгновенно.
|
|||
10
Euguln
24.12.14
✎
13:28
|
Попытка
А = Число(Строка); Исключение //пичалька КонецПопытки |
|||
11
Homer
24.12.14
✎
13:29
|
(9) а еще быстрее можно?
|
|||
12
Фокусник
24.12.14
✎
13:29
|
(6) "Строка может содержать символы, пробелы, неразрывные пробелы"
Задача не ясная. Например что должно получиться на выходе из строки: "в5вл валм88044.4449 ваалсс 94940" ? :) |
|||
13
Эмбеддер
24.12.14
✎
13:30
|
(9) да и строка в число с такой же мгновенной скоростью преобразуется)))
|
|||
14
DexterMorgan
24.12.14
✎
13:31
|
(11) АЦЦ быстрее
|
|||
15
Ненавижу 1С
гуру
24.12.14
✎
13:31
|
откуда строка то берется?
|
|||
16
ejiki
24.12.14
✎
13:32
|
Число()
|
|||
17
BubbleGumm
24.12.14
✎
13:38
|
Короче это прайс. Идет цена с разделителями разрядов (это про пробелы), затем валюта. Валюта может быть - рубли, USD, EUR, после валюты может быть точка (или нет).
|
|||
18
Enterprise
24.12.14
✎
13:40
|
regexp!
|
|||
19
BubbleGumm
24.12.14
✎
13:42
|
(18) Ну вот разве. Нет примеров для моего случая, вникать честно говоря неохота)
|
|||
20
ejiki
24.12.14
✎
13:43
|
(17) ты приведи пример строчки. Описание уже увидели. Просто сюда забей какое строковое значение ты пытаешься обработать.
|
|||
21
Бубка Гоп
24.12.14
✎
13:44
|
123 000 руб. надо преобразовать в 123000 ?
|
|||
22
BubbleGumm
24.12.14
✎
13:45
|
(17) Все возможные варианты? )
Ну вот для примера: 1 450 руб. 1 450 руб 1450 руб 1450руб 1450руб. и т.д. с другими валютами |
|||
23
shuhard
24.12.14
✎
13:47
|
(22) зевая и это всё ?
|
|||
24
ejiki
24.12.14
✎
13:47
|
(22) Ну тогда написать процедурку или функцию, сначала отрезаешь незначащие символы, затем убираешь пробелы. ну а дальше Число()
|
|||
25
BubbleGumm
24.12.14
✎
13:49
|
(24) Я же указал, что важно СКОРОСТЬ
|
|||
26
Enterprise
24.12.14
✎
13:50
|
(25) ты не заметишь потерю в скорости если как в (24) сделать
|
|||
27
Aleksey
24.12.14
✎
13:52
|
(25) в типовых юзается такая функция
Функция ПолучитьЧислоИзСтроки(Знач НомерДок) Если ПустаяСтрока(НомерДок) Тогда Возврат 0; КонецЕсли; ТолькоЦифры = Истина; ДлинаНомера = СтрДлина(НомерДок); Для инд = 1 По ДлинаНомера Цикл // поиск ведем с конца номера, до первого не цифрового символа ПозицияНеЦифровойСимвол = ДлинаНомера - инд + 1; Код = КодСимвола(НомерДок, ПозицияНеЦифровойСимвол); Если Код < 48 ИЛИ Код > 57 Тогда ТолькоЦифры = Ложь; Прервать; КонецЕсли; КонецЦикла; Если ТолькоЦифры Тогда Номер = НомерДок; ИначеЕсли ПозицияНеЦифровойСимвол < ДлинаНомера Тогда Номер = Сред(НомерДок, ПозицияНеЦифровойСимвол + 1); ИначеЕсли ПозицияНеЦифровойСимвол = ДлинаНомера Тогда Возврат НомерДок; КонецЕсли; Возврат Число(Номер); КонецФункции |
|||
28
BubbleGumm
24.12.14
✎
14:03
|
Да не проблема же никакая функцию нацарапать. Прайсов будет дофига, грузить нужно чем быстрее тем лучше.
|
|||
29
Бубка Гоп
24.12.14
✎
14:03
|
адаптируя (27) к задаче
ДлинаНомера = СтрДлина(Строка); ТоЧтоБудетЧислом = ""; Для инд = 1 По ДлинаНомера Цикл Код = КодСимвола(Строка, инд); Если Код < 48 ИЛИ Код > 57 Тогда продолжить; КонецЕсли; ТоЧтоБудетЧислом = ТоЧтоБудетЧислом + сред(Строка,инд,1); КонецЦикла; число=ТоЧтоБудетЧислом; |
|||
30
BubbleGumm
24.12.14
✎
14:04
|
Да нехочется 1с циклов нифига
|
|||
31
Fragster
гуру
24.12.14
✎
14:05
|
проще договориться с поставщиком о нормальных прайсах
|
|||
32
BubbleGumm
24.12.14
✎
14:06
|
Поставщиков много. Кто гарантирует, что хоть один не заартачится?
|
|||
33
Бубка Гоп
24.12.14
✎
14:07
|
(32) гарантирует поле типа число, например. через что идет обмен то?
|
|||
34
BubbleGumm
24.12.14
✎
14:09
|
(33) Через ексель файлы
|
|||
35
Fragster
гуру
24.12.14
✎
14:10
|
(34) а там точно "строка"? может быть там "число с форматом"?
|
|||
36
BubbleGumm
24.12.14
✎
14:11
|
(35) строка
|
|||
37
BubbleGumm
24.12.14
✎
14:12
|
(35) Я же говорю, поставщики разные и возможно будут новые, кто как сделает неизвестно
|
|||
38
Бубка Гоп
24.12.14
✎
14:12
|
(34) Через ексель файлы
это и есть проблема |
|||
39
hhhh
24.12.14
✎
14:12
|
(32) а какой смысл в огромной скорости при загрузке прайсов? Ну съэкономите вы максимум 10-12 наносекунд, вам премию что ли дадут? Скорость нужна при обслуживании клиента. А это потом.
|
|||
40
Fragster
гуру
24.12.14
✎
14:13
|
(37) универсально все равно не напишешь, придется полууниверсально под каждого все равно допиливать. проще договориться о формате
|
|||
41
Fragster
гуру
24.12.14
✎
14:14
|
(40)+ и впихнуть пункт в договор с XSD схемой :)
|
|||
42
BubbleGumm
24.12.14
✎
14:14
|
(39) Объемы прайсов большие, их много.
А вообще вопрос в том, что есть ли простые, известные может быть, решения. Если нет, то нет, загрузить конечно всяко можно. |
|||
43
13_Mult
24.12.14
✎
14:15
|
||||
44
su_mai
24.12.14
✎
14:16
|
(0) Используй Int32.TryParce(<Строка>);
|
|||
45
olegves
24.12.14
✎
14:17
|
(32) кто платит денег, тот и заказывает музыку - заартачился - ищи нового клиента
|
|||
46
BubbleGumm
24.12.14
✎
14:18
|
(45) Есть задача и ее можно либо решать, либо нет. Мне нужно решить.
|
|||
47
Мыш
24.12.14
✎
14:18
|
ТолькоЦифры="";
РазделительНеНайден=Истина; Для х=1 По СтрДлина(ИсходнаяСтрока) Цикл Симв = Сред(ИсходнаяСтрока,х,1); Если Найти(Симв,"0123456789")<>0 Тогда ТолькоЦифры=ТолькоЦифры+Симв; КонецЕсли; Если РазделительНеНайден И Найти(Симв,".,;=-")<>0 Тогда ТолькоЦифры=ТолькоЦифры+","; РазделительНеНайден=Ложь; КонецЕсли; КонецЦикла; ИскомоеЧисло=Число(ТолькоЦифры); |
|||
48
olegves
24.12.14
✎
14:19
|
(42) а вообще, де много поставщиков, прайсы грузят отдельно от накладных (можно ночью), обрабатывая спец ящики поставщиков.
|
|||
49
olegves
24.12.14
✎
14:21
|
(47) а в (27) будет побыстрее, чем Найти()
|
|||
50
BubbleGumm
24.12.14
✎
14:26
|
(49) Ну да. Но хотелось бы внешний вызов, компонента может есть, циклы 1с по каждой позиции грустно выглядят. Там прайсы довольно объемные.
|
|||
51
hhhh
24.12.14
✎
14:28
|
(50) вызов компоненты в 100 раз медленнее, бери решения (24),(27) или (29), они имеют огромную скорость по сравнению с чтением файла Excel.
|
|||
52
Enterprise
24.12.14
✎
14:29
|
(50) Прайсы терабайтные что ли у тебя?
|
|||
53
BubbleGumm
24.12.14
✎
14:30
|
(52) Вообще вопрос безотносительно размеров. Можно ли ускорить загрузку, просто УСКОРИТЬ. А какие там прайсы дело десятое.
|
|||
54
vicof
24.12.14
✎
14:32
|
(53) Можно ли ускорить станок, чтобы он больше деталей выдавал? Просто ускорить, неважно какой станок.
|
|||
55
hhhh
24.12.14
✎
14:33
|
(53) ускорить - это значит ускорить чтения файлов excel, например куда-нибудь их на быстрый диск помести.
|
|||
56
Мыш
24.12.14
✎
14:33
|
(53) Уверен, что нужно ускорять именно преобразование в число? Замер то делал?
|
|||
57
BubbleGumm
24.12.14
✎
14:34
|
(55) Загрузка цен происходит уже из 1с таблицы, которая предварительно обработана.
|
|||
58
BubbleGumm
24.12.14
✎
14:34
|
(56) Ускорять нужно то, что можно ускорить.
|
|||
59
Бубка Гоп
24.12.14
✎
14:34
|
(56) или xml например юзать. или тот же dbf, где у поля будет тип число и никак туда всякая шняга не попадет. вот это добавит скорости
|
|||
60
Мыш
24.12.14
✎
14:35
|
(58) Однако, логично! Значит нужно покупать новый комп, а не компоненты искать )
|
|||
61
BubbleGumm
24.12.14
✎
14:35
|
(59) Или сразу документ установка цен материализовать из воздкуха, вот здорово то
|
|||
62
BubbleGumm
24.12.14
✎
14:36
|
(60) Это одно из мест, что можно ускорить. ОДНО ИЗ
|
|||
63
hhhh
24.12.14
✎
14:36
|
(57) блин, так в предварительной обработке и перепишите. Что-то вы совсем фигней страдаете.
|
|||
64
Мыш
24.12.14
✎
14:37
|
(61) Дано: Excel. Решение: ускорить преобразование в число. Причина: преобразование можно ускорить.
Другие вероятные причины за бортом? ) |
|||
65
Бубка Гоп
24.12.14
✎
14:38
|
(61) уж лучше напрямую из типизированного файла чем посредством таблицы, где контроль типа вообще никак не осуществляется. хочется скороссти - апгрейдить железо или менять алгоритм
|
|||
66
Мыш
24.12.14
✎
14:39
|
(62) Дык понятно. Но скорее всего данные преобразования будут занимать процентов 5 от общего времени. В работе с экселем основной затык на чтении обычно.
|
|||
67
Cap_1977
24.12.14
✎
14:40
|
(0) А как данные с ячейки листа получаешь ?
|
|||
68
BubbleGumm
24.12.14
✎
14:42
|
(67) Через ADODB.Recordset
|
|||
69
BubbleGumm
24.12.14
✎
14:43
|
(64) Про другие причины у меня вопросов нет. Вопрос по ЭТОЙ проблеме.
|
|||
70
Fish
24.12.14
✎
14:43
|
(69) А в этом нет никакой проблемы.
|
|||
71
BubbleGumm
24.12.14
✎
14:44
|
(70) Приблемы нет, да. И?
|
|||
72
Cap_1977
24.12.14
✎
14:44
|
(68) Покаж код
|
|||
73
BubbleGumm
24.12.14
✎
14:45
|
(72) Какой? И зачем?
|
|||
74
Мыш
24.12.14
✎
14:46
|
(69) Лучший вариант - под формат числа каждого поставщика написать отдельную, наиболее быструю в конкретном случае функцию.
|
|||
75
BubbleGumm
24.12.14
✎
14:46
|
(74) Может и так. Но преобразовывать в любом случае придется.
|
|||
76
Enterprise
24.12.14
✎
14:47
|
(71) И вопросов уже тоже не осталось)
|
|||
77
BubbleGumm
24.12.14
✎
14:48
|
(76) Остался, остался.
|
|||
78
Куро
24.12.14
✎
14:51
|
регулярные выражения юзай
|
|||
79
BubbleGumm
24.12.14
✎
14:52
|
(78) Да, пока к такому же мнению пришел. Разбираться честно говоря в облом. Нет готового шаблона?
|
|||
80
Enterprise
24.12.14
✎
14:56
|
(79) ну не факт что regexp будет быстрее. Тут уже надо тестить
|
|||
81
BubbleGumm
24.12.14
✎
14:59
|
(80) Ну потестить не проблема.
|
|||
82
Jaap Vduul
24.12.14
✎
14:59
|
(80)Факт, что будет медленнее.
|
|||
83
BubbleGumm
24.12.14
✎
15:00
|
(82) Проверял?
|
|||
84
kosts
24.12.14
✎
15:07
|
(0) Если это Excel, то прямо в Excel сделать в колонке цены все возможные замены, запятые на точки, пробелы и неразрывные пробелы удалить. различные варианты руб удалить.
Далее
|
|||
85
kosts
24.12.14
✎
15:08
|
(84)+ Как вариант, для проверки, может так еще и медленнее получится...
|
|||
86
Drac0
24.12.14
✎
15:10
|
Напиши макрос, прицепи его к файлу Ексель, запусти и после этого грузи данные.
|
|||
87
BubbleGumm
24.12.14
✎
15:10
|
(84) Ну тоже вариант. Но пользователи вряд ли будут заморачиваться. Я же говорю, вопрос не то чтобы очень критичный, но если можно ускорить этот момент, то хорошо, если нет вариантов, ну значит нет.
|
|||
88
BubbleGumm
24.12.14
✎
15:11
|
(86) Ну тоже вариант) Но см. (87)
|
|||
89
Drac0
24.12.14
✎
15:12
|
(88) А при чем тут пользователи? Делай это все программно.
|
|||
90
BubbleGumm
24.12.14
✎
15:14
|
(89) Да, попробую.
Ладно, всем спасибо, я поехал с работы) |
|||
91
AlexITGround
24.12.14
✎
15:14
|
Где Маня, потенциальный покупатель уходит.
|
|||
92
kosts
24.12.14
✎
15:17
|
Попробовать обойтись без присвоений, все в одной строке.
|
|||
93
pessok
24.12.14
✎
15:28
|
(91) у мани сейчас скидки, ему невыгодно продавать :)
я бы сделал как в (27) только шел с конца |
|||
94
Fish
24.12.14
✎
15:29
|
(92) Не взлетит.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |