Имя: Пароль:
1C
1С v8
Преобразование в число без попытки?
,
0 YF
 
01.06.12
10:38
В 7.7 Число(любаяХерь) - без ошибок будет некое число

В 8.2 Число(любаяХерь) - либо будет число, либо вывалится в ошибку, подскажите как делать, чтобы ошибка не возникала
1 MadHead
 
01.06.12
10:40
а чем попытка не угодила?
Либо обрабатывать вручную все лишние символы либо пустую строку
2 pumbaEO
 
01.06.12
10:41
RegExp вырезать только цифрофые символы, не забыть про неразрывный пробел и можно без попытки.
3 MadHead
 
01.06.12
10:41
Имхо. от религиозных взглядов при программировании стоит отречься )
4 Ursus maritimus
 
01.06.12
10:41
(2) А вот и куй
5 pumbaEO
 
01.06.12
10:43
(4) куй regexp-ом вырезать извини не смогу, это надо к хирургу обращаться.
6 Живой Ископаемый
 
01.06.12
10:43
Функция ЕстьНеЦифры(Знач СтрокаПроверки) Экспорт
7 zinch
 
01.06.12
10:43
через ОписаниеТипа
8 zinch
 
01.06.12
10:44
метод ПривестиЗначение
9 Ursus maritimus
 
01.06.12
10:44
(5) Куй, что после вырезания лишних символов можно без попытки
10 Defender aka LINN
 
01.06.12
10:45
ПривестиЗначение
11 Maxus43
 
01.06.12
10:50
на мисте эпидемия, всем перестала нравится Попытка Исключение, что за новый трэнд?
12 Stepa86
 
01.06.12
10:53
(11) Исключения нужны для исключительных ситуаций и для их проброса вверх по стеку, применение их в положительных и отрицательных сценариях работы лучше свести к минимуму. Можно рассматривать попытку как GoTo который работает не только в рамках процедуры, но и по стеку передать управление может
13 Ursus maritimus
 
01.06.12
10:53
(11) Вообще говоря, эта конструкция предназначена для локализации ошибок, на которые ты повлиять не можешь. Типа шлешь запрос в интернет серверу, а он не отвечает.
14 Maxus43
 
01.06.12
10:55
(12)(13) в контексте (0) - кривые данные передаются откуда-то, не типизированные. имхо от этого надо уходить а не пытаться "Мама" в число переделать
15 Ursus maritimus
 
01.06.12
10:56
(14) А кто спорит-то?
16 fisher
 
01.06.12
10:57
(11) Фигасе. А был тренд любителей попытки/исключения? Хорошо, что я не в тренде...
17 Maxus43
 
01.06.12
10:59
(16) трэнд избегать попытка-исключение там, для чего по сути он и придуман... например
v8: Как проверить что Ид нормальный для ЗначениеИзСтрокиВнутр(Ид)?
18 Stepa86
 
01.06.12
10:59
(14) если мы можем обработать ситуацию без вызова исключения, то стоит это сделать. Я как то очень долго ловил ошибку "В данной транзакции уже происходили ошибки". Оказалось, что в транзакции записи было преобразование строки в число через попытку и исключение рвало транзакцию, хотя вещь вроде б безобидная
19 Maxus43
 
01.06.12
11:00
(18) не спорю что надо от этого уходить, но может есть смысл разобраться с входящими данными и не допускать такой ситуации сначала
20 Shurjk
 
01.06.12
11:01
(0) Разбираешь сначала строки если в ней не только цифры, то выдаешь сообщение  оневозможности преобразования, на самом деле попытка отработает примерно так же.
21 Maxus43
 
01.06.12
11:03
вобще путь нормальный в (6), есть типовые функции для разбора строк
22 Stepa86
 
01.06.12
11:06
(19) от заложенной логики зависит. Если на вход должна приходить строка, которую всегда можно преобразовать в число и иного не должно быть в принципе, то падать в исключение самое оно. Если логика - смогли преобразовать - молодцы, нет, так 0/Null/Неопределено вернем - то исключение не нужно. Самая наверно частая ситуация - дернуть число из номера или кода, тут исключение не нужно.
23 YF
 
01.06.12
11:07
(11) Попытка Исключение много строк занимает в коде :-), да и при отладке писец когда ставишь остановку по ошибке
24 YF
 
01.06.12
11:10
(14) А на мой взгляд тупая реализация функции преобразования типов. В СП нигде не написано, что в параметре должно быть что-то определенное.

Блин, походу придется свою функцию приделывать, в которой и будет попытка
25 Maxus43
 
01.06.12
11:16
(24) чем (6) то не устраивает? непонимать... без попытки будет
26 Никола_
Питерский
 
01.06.12
11:28
(11) БП 2.0 Количество попыток 4080 шт.
    БП 3.0 Количество попыток 2199 шт.

Так что тренд ))))
27 pumbaEO
 
01.06.12
11:30
(26) а как изменяется количество "Выполнить"?
28 Maxus43
 
01.06.12
11:33
(27) ".Выполнить()", а то там таких слов у процедур и.д. много)
29 oleg_km
 
01.06.12
12:20
Функция Стр2Число(Знач текСтрока, РазделительДроби = ".") Экспорт
   оРег = Новый COMОбъект("VBScript.RegExp");
   оРег.Pattern = "[^0-9" + РазделительДроби + "+-]";
   оРег.Global = Истина;
   текСтрока = СтрЗаменить(оРег.Replace(текСтрока, ""), РазделительДроби, ".");
   
   Рез = Неопределено;
   Попытка Рез = Число(текСтрока); Исключение КонецПопытки;
   Возврат Рез;
КонецФункции
30 oleg_km
 
01.06.12
12:20
Попытку оставил просто так, на всякий случай
31 Ursus maritimus
 
01.06.12
12:26
(30) Не на всякий случай, а на вполне конкретный. Вот, например: "123.123.123"
32 DailyLookingOn Sunset
 
01.06.12
12:34
(26)
В БП3 пока функционал меньше БП2.
Как догонятся, попыток больше станет.
33 Vladal
 
01.06.12
12:38
А если посимвольно перебрать всю строку в цикле?

Результат = "0";
Цикл
Если Символ(источник, счетчик, 1) - это цифра Тогад
   Результат = Результат + Символ;
КонецЦикла;

Результат = Число(Результат)
34 YF
 
01.06.12
14:05
(33) Из строки "123-90 вася 100" получишь число 1230100, а должно быть 0
(25) Устраивает, тока все равно отдельной функцией надо преобразовывать в число.

Вобщем логика разработчиков так и осталась загадкой. Прежде чем преобразовать надо узнать а преобразуется ли - бред.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс