Имя: Пароль:
1C
 
Убрать нули слева
0 Глупый дятел
 
20.05.09
15:09
Есть ли стандартная функция, отсекающая в строке нули слева? Или только обработку писать нужно?
1 Mitriy
 
20.05.09
15:10
Число
2 Aswed
 
20.05.09
15:11
Число(НужнаяСтрока)
3 Ненавижу 1С
 
гуру
20.05.09
15:11
(0) ага обработку, лучше подсистему или конфигурацию
Число("02");
4 kmvbad
 
20.05.09
15:17
Гы:) а в строке "0123абв" ?
5 kmvbad
 
20.05.09
15:18
Причем это скажем, справочник, и длина числовой части переменная?
6 Aprobator
 
20.05.09
15:19
это смотря какая строка - если 00000А то придется писать. Хотя делов - то 2 минуты.

СимволовВСтроке = СтрДлина(ИскомаяСтрока);
КодНуля = 48; // это для контроля Строка 0 и число О тракутются при сравнении по разному, но код символа у них один
ПозицияНеНуля = 1;
Для НомерСимвола = 1 По СимволовВСтроке Цикл
   ПроверяемыйСимвол =  Сред(ИскомаяСтрока, НомерСимвола,1);
   Если КодСимвола(ПроверяемыйСимвол) <> 48 Тогда
        ПозицияНеНуля = НомерСимвола;
        Прервать;
   КонецЕсли;
КонецЦикла;

СтрокаБезВедущихнулей = Сред(ИскомаяСтрока, ПозицияНеНуля);
7 НЕА123
 
20.05.09
15:21
не пятница, но все-таки...

СтрокаБезВедущихнулей = ВходСтрока;
ПОка Найти(СтрокаБезВедущихнулей,"0") = 1 цикл
СтрокаБезВедущихнулей = Сред(СтрокаБезВедущихнулей,2);
КонецЦикла;
8 Fragster
 
гуру
20.05.09
15:23
регэкспом заменить
"^0+" на ""
9 НЕА123
 
20.05.09
15:23
(7)+ но, предложенное в (6) должно быть быстрее
10 Aprobator
 
20.05.09
15:24
(7) - о так пошустрее будет :)
11 Aprobator
 
20.05.09
15:25
(9)точно ?
12 zbv
 
20.05.09
15:26
замерьте.
13 НЕА123
 
20.05.09
15:28
(11)
если исходнаястрока длинная - то да.
14 Aprobator
 
20.05.09
15:30
эх - ежа бы сюда. Он бы точно все рассудил :).
15 Глупый дятел
 
20.05.09
15:30
Спасибо, совет правильный. Еще такой вопрос всвязи с этим, есть форма списка документов, надо, чтобы номер документа там также без нулей был, как это проще сделать?
16 ASU_Diamond
 
20.05.09
15:33
(15) посмотри модуль печати документа, там и префикс убирается, и нули
17 Aprobator
 
20.05.09
15:33
можно попробовать при вводе строки устновить вывод текста и там подменять номер.
18 НЕА123
 
20.05.09
15:36
аналог (6)

стр = стрзаменить(ВходСтр,"0",Символы.ПС);
для к = 1 по СтрЧислоСтрок(стр) Цикл
     если СтрДлина(стрполучитьстроку(стр,к))>0 тогда
          прервать;
      КОнецЕсли;
КонецЦикла;

стрбезнулей = стрзаменить(сред(стр,к),Символы.ПС,"0");
19 НЕА123
 
20.05.09
15:45
(6)
>    ПроверяемыйСимвол =  Сред(ИскомаяСтрока, НомерСимвола,1);
>    Если КодСимвола(ПроверяемыйСимвол) <> 48 Тогда

достаточно
   Если КодСимвола(ПроверяемыйСимвол,ПроверяемыйСимвол) <> 48 Тогда

+если уж на скорость, то ПозицияНеНуля можно выкинуть. в 1С переменная цикла при выходе из цикла определена (НомерСимвола).
20 НЕА123
 
20.05.09
15:46
при выходе  =  после выхода
21 hhhh
 
20.05.09
16:02
можно еще

стр = СокрЛ(СтрЗаменить(ИскомаяСтрока, "0", " "));
Поз = СтрДлина(ИскомаяСтрока) - СтрДлина(стр) + 1;

Если Поз > 1 Тогда
   СтрокаБезВедущихнулей = Сред(ИскомаяСтрока,Поз);
Иначе
   СтрокаБезВедущихнулей = ИскомаяСтрока;
КонецЕсли;
22 Aprobator
 
20.05.09
16:03
о где Serg69? Он такое любит под попкорн.
23 Aprobator
 
20.05.09
16:07
Вот еще вариант (если посередине строки пробелов нет):

СтрокаБезНулей = СтрЗаменить(ИскомаяСтрока, "0", " ");
СтрокаБезНулей = СокрЛ(СтрокаБезНулей);
Результат = СтрЗаменить(СтрокаБезНулей, " ", "0");
24 hhhh
 
20.05.09
17:31
(23) если были пробелы, не прокатит.
25 Fragster
 
гуру
20.05.09
17:33
СтрокаБезНулей = СтрЗаменить(СтрЗаменить(ИскомаяСтрока," ", "_"), "0", " ");
СтрокаБезНулей = СокрЛ(СтрокаБезНулей);
Результат = Прав(ИсходнаяСтрока, СтрДлина(СтрБезНулей));
26 Serg_1960
 
20.05.09
17:41
(22) А? что? где? где попкорн?

   //Убрать ведущие нули из строки
   Запрос = Новый Запрос();
   Запрос.Текст = "ВЫБРАТЬ    ВЫБОР КОГДА Т1.Стр ПОДОБНО ""0%"" ТОГДА ПОДСТРОКА(Т1.Стр, 2, 1000) ИНАЧЕ Т1.Стр КОНЕЦ КАК БезНулей
                  |ИЗ (ВЫБРАТЬ    ВЫБОР КОГДА Т2.Стр ПОДОБНО ""00%"" ТОГДА ПОДСТРОКА(Т2.Стр, 3, 1000) ИНАЧЕ Т2.Стр КОНЕЦ КАК Стр
                  |ИЗ (ВЫБРАТЬ    ВЫБОР КОГДА Т3.Стр ПОДОБНО ""0000%"" ТОГДА ПОДСТРОКА(Т3.Стр, 5, 1000) ИНАЧЕ Т3.Стр КОНЕЦ КАК Стр
                  |ИЗ (ВЫБРАТЬ    ВЫБОР КОГДА Т4.Стр ПОДОБНО ""00000000%"" ТОГДА ПОДСТРОКА(Т4.Стр, 9, 1000) ИНАЧЕ Т4.Стр КОНЕЦ КАК Стр
                  |ИЗ (ВЫБРАТЬ    ВЫБОР КОГДА Т5.Стр ПОДОБНО ""0000000000000000%"" ТОГДА ПОДСТРОКА(Т5.Стр, 17, 1000) ИНАЧЕ Т5.Стр КОНЕЦ КАК Стр
                  |ИЗ (ВЫБРАТЬ    ВЫБОР КОГДА &ЕстьНули ПОДОБНО ""00000000000000000000000000000000%"" ТОГДА ПОДСТРОКА(&ЕстьНули, 33, 1000) ИНАЧЕ &ЕстьНули КОНЕЦ КАК Стр) КАК Т5) КАК Т4) КАК Т3) КАК Т2) КАК Т1";
                 
   // Проверим?
   Фигня = "0000000000000000000000000000000000000000000000000000000000000000123";
   Запрос.УстановитьПараметр("ЕстьНули", Фигня);
   Выборка = Запрос.Выполнить().Выбрать();
   Выборка.Следующий();
   Сообщить("Было : " + Фигня + ", стало : " + Выборка.БезНулей);
   Возврат;
27 LamerSuper
 
20.05.09
17:43
БезНулей=Строка(Число(СНулями))
Наверно
28 Fragster
 
гуру
20.05.09
18:01
(27) а если номер «000123-бис»?
29 ehrmann
 
20.05.09
18:03
(28) тогда надо возвращатсо к пункту (4) и читать все заново
Компьютер — устройство, разработанное для ускорения и автоматизации человеческих ошибок.