Имя: Пароль:
1C
1С v8
Как удалить из строки все символы кроме цифр?
,
0 meegor
 
17.02.14
12:24
Добрый день, возник вот такой срочно вопрос, спасибо!
1 Wobland
 
17.02.14
12:24
перебором
2 1Сергей
 
17.02.14
12:25
можно без цикла
3 Wobland
 
17.02.14
12:25
(2) регэксп?
4 1Сергей
 
17.02.14
12:27
(3)

Функция ТолькоЦифры(Строка) Экспорт
    Если СтрДлина(Строка) = 0 Тогда
        Возврат "";
    ИначеЕсли (Строка>="0") И (Строка<="9") Тогда
        Возврат Лев(Строка, 1) + ТолькоЦифры(Сред(Строка, 2));
    Иначе
        Возврат ТолькоЦифры(Сред(Строка, 2));
    КонецЕсли;
КонецФункции
5 1Сергей
 
17.02.14
12:31
*
//ИначеЕсли (Строка>="0") И (Строка<="9") Тогда
ИначеЕсли (Строка>="0") И (Лев(Строка,1)<="9") Тогда
6 1Сергей
 
17.02.14
12:31
писал на коленке
7 Wobland
 
17.02.14
12:32
(Лев(Строка,1)<="9")
во. чувствую, что-то не сходится ;)
8 alexei366
 
17.02.14
12:33
(4) Жесть.
Мож 1 цикл по всем символам, и смотреть на результат функции "КодСимвола()" (точно не помню там какие коды для 0-9), ну и если код попадает в диапазон кодов цифр то добавлять в результат, а в конце результат на "Возврат"
9 1Сергей
 
17.02.14
12:33
абажаю рекурсию. хотя, она тут нафиг не нужна :)
10 1Сергей
 
17.02.14
12:34
(8) см (2),(3)
11 1Сергей
 
17.02.14
12:35
а коды 48 и 57. Это я помню, но так нагляднее
12 alexei366
 
17.02.14
12:36
(10) Да лучше уж цикл чем стек вызовов функций.
13 badboychik
 
17.02.14
12:37
СтрокаИтог = "";
цикл по символам {
   СтрокаИтог = СтрокаИтог +?(Найти("0123456789",Символ),Символ,"");
}
14 1Сергей
 
17.02.14
12:37
(13) это ты с сями попутал
15 Wobland
 
17.02.14
12:37
Для й=0 По 256 Цикл
Если й<=48 и й>=57
  СтрЗаменить(стр, Символ(й), "");
16 badboychik
 
17.02.14
12:38
(14) лень писать валидный 1С, переводи с псевдокода
17 Torquader
 
17.02.14
12:38
Функция УбратьВсёКроме(пстрДанные,пстрДопустимые)
лчДл=СтрДлина(пстрДанные);
лстр="";
Для лч=1 По лчДл Цикл
  лстрСимв=Сред(пстрДанные,лч,1);
  Если Найти(пстрДопустимые,лстрСимв)>0 Тогд
   лстр=лстр+лстрСимв;
  КонецЕсли;
КонецЦикла;
Возврат лстр;
КонецФункции
18 1Сергей
 
17.02.14
12:39
(15) конкурс на самый медленный код считается открытым? :)
19 Wobland
 
17.02.14
12:40
(18) ага. 256 - это я недобрал
20 Torquader
 
17.02.14
12:41
(19) А у нас символы не Unicode разве ?
21 Wobland
 
17.02.14
12:41
(20) вово
22 alexei366
 
17.02.14
12:41
Функция ТолькоЦифры(Строка)
    
    Длинна = СтрДлина(Строка);
    Итог = "";
    Для Инд = 1 По Длинна Цикл
        Символ = Сред(Строка,Инд,1);
        КодСимвола = КодСимвола(Символ);
        Если КодСимвола > 47 И КодСимвола < 58 Тогда
            Итог = Итог+Символ;
        КонецЕсли;
    КонецЦикла;
    
    Возврат Итог;
    
КонецФункции
23 kosts
 
17.02.14
12:42

ВвестиТекст = "щш56щш6гшнг5нг5нг5нг54574347547547";
Подсказка = "Введите только цифры";
Если ВвестиСтроку(Текст, Подсказка, 30) Тогда
    
КонецЕсли;

24 Torquader
 
17.02.14
12:42
(21) На самом деле, если длина строки более 64Кб, то метод не очень-то и медленным покажется.
25 Wobland
 
17.02.14
12:43
(23) не факт, что это - самый медленный вариант. незачёт
26 badboychik
 
17.02.14
12:43
Й=СтрДлина(ИсхСтрока);
У=1;
_="";
Для Х = У по Й Цикл
   ъ=ИсхСтрока[Х];
   _=_+?(Найти(ъ,ИсхСтрока)>0,ъ,"");
КонецЦикла;
27 Torquader
 
17.02.14
12:43
(23) Надо чтобы пользователю, который вместо цифр ввёл то, чего не должно быть, показывалась картинка с результатом, которого тоже быть не должно - тогда будут думать.
28 badboychik
 
17.02.14
12:44
(14) так норм?
29 Серго62
 
17.02.14
12:45
Может так?
СтрЗаменить("Строка1234567890", "0", "")
...
СтрЗаменить("Строка1234567890", "9", "")
30 1Сергей
 
17.02.14
12:45
(26) подогнал под ответ.

Переменная У там в наху? не нужна
31 Wobland
 
17.02.14
12:46
(27) 25й кадр? бойцовский клуб вспоминаетяс
32 badboychik
 
17.02.14
12:49
а вообще самый правильный способ

re = new Regexp('\D');
re.replace(str,"");
33 1Сергей
 
17.02.14
12:50
Прав (27).
У нас, если не проставлены коэффициенты у ЕИ товаров, то количество считается как 9999999999999999999 и этому есть логичное объяснение.
Когда Коэф = 0 у одной из позиций, то это не сразу видно в большой портянке документа, при печати, итоговая сумма похожа на правду. Но, когда итоговая сумма = 99999999999999999, то чел сразу понимает, что в документе что-то не так
34 Адинэснег
 
17.02.14
12:52
Если Не СтроковыеФункцииКлиентСервер.ТолькоЦифрыВСтроке(ИсхСтрока) Тогда
    Предупреждение("Ху?!!1");
КонецЕсли;
35 kosts
 
17.02.14
12:52

Функция ТолькоЦифры(Знач СтрокаСЦифрамиИСимволами)
    
    ПервыйСимвол = Лев(СтрокаСЦифрамиИСимволами, 1);
    Если ПервыйСимвол = "" Тогда
        Возврат "";
    ИначеЕсли ЭтоЧисло(ПервыйСимвол) Тогда
        Возврат ПервыйСимвол + ТолькоЦифры(Сред(СтрокаСЦифрамиИСимволами, 2));
    Иначе
        Возврат ТолькоЦифры(Сред(СтрокаСЦифрамиИСимволами, 2));
    КонецЕсли;
    
КонецФункции

Текст = "щш56щш6гшнг5нг5нг5нг54574347547547";
Сообщить(Текс + "->" + ТолькоЦифры(Текст), СтатусСообщения.Информация);
36 Torquader
 
17.02.14
12:52
(33) А машина это сама проверить и сказать пользователю не может ?
37 1Сергей
 
17.02.14
12:53
(36) нельзя
38 1Сергей
 
17.02.14
12:55
(35) агамс, теперь давай функцию ЭтоЧисло :)
39 Torquader
 
17.02.14
12:55
(37) Почему нельзя ?
40 1Сергей
 
17.02.14
12:56
(39) требование бизнеса.
41 Torquader
 
17.02.14
12:56
(40) Лучше один раз объяснить, почему так делать нехорошо, чем реализовывать бредовую идею.
42 1Сергей
 
17.02.14
12:57
(41) не ты ли в (27) предложил аналогичный вариант?
43 Wobland
 
17.02.14
12:57
а по-моему (33) имеет право на жизнь. изящненько так ;)
44 Torquader
 
17.02.14
12:58
(43) Ну, можно ещё и минус пририсовать - если в графе минус, то явно что-то в "консерватории исправить надо".