Имя: Пароль:
1C
1С v8
Найти все целые числа в строке
0 Адинэснег
 
13.05.13
15:55
Понедельник день тяжелый.
Думать лень. Может есть готовая функция.
Берем строку произвольной длины. Ищем все целые числа, состоящие из идущих подряд цифр.
Возвращаем массив чисел
1 Maxus43
 
13.05.13
15:57
тоже думать лень
2 1Сергей
 
13.05.13
15:58
последовательность символов 123.01 отбрасываем как нецелое?
последовательность символов 123.00 оставляем как целое?
3 mxs089
 
13.05.13
15:58
пиши сам
4 1Сергей
 
13.05.13
15:59
как интерпретировать последовательность символов 123.00.321 ?
5 1Сергей
 
13.05.13
16:00
Взялся бы, но времени нет
6 mxs089
 
13.05.13
16:00
пускай сам думает
7 palpetrovich
 
13.05.13
16:01
(5) а что, (4) можно как-то порешать без доп.разъяснений?
8 palpetrovich
 
13.05.13
16:02
+ 7, а может-же быть и хуже, типа: 123.32.321.123
9 drcrasher
 
13.05.13
16:04
(0) думать лень. собираешь массив из всего, что подпадает под понятие число. возвращаешь.
10 Адинэснег
 
13.05.13
16:07
Функция ЧислаВСтроке (СтрокаПоиска)
   
    МассивЧисел = Новый Массив;
    ЧислоСтрокой = "";
   
    Для н=0 По СтрДлина(СтрокаПоиска) Цикл
        Цифра = Сред(СтрокаПоиска, н, 1);
        Если Цифра = "0" ИЛИ
            Цифра = "1" ИЛИ
            Цифра = "2" ИЛИ
            Цифра = "3" ИЛИ
            Цифра = "4" ИЛИ
            Цифра = "5" ИЛИ
            Цифра = "6" ИЛИ
            Цифра = "7" ИЛИ
            Цифра = "8" ИЛИ
            Цифра = "9" Тогда
            ЧислоСтрокой = ЧислоСтрокой + Цифра;
        Иначе
            Если ЗначениеЗаполнено(ЧислоСтрокой) Тогда
            МассивЧисел.Добавить(ЧислоСтрокой);
            ЧислоСтрокой = "";
            КонецЕсли;
           
        КонецЕсли;
    КонецЦикла;
КонецФункции
11 Лефмихалыч
 
13.05.13
16:09
(0) "йцу34.34фыв"
сколько тут целых чисел?
12 Адинэснег
 
13.05.13
16:09
(4)
123
00
321
13 drcrasher
 
13.05.13
16:11
(10) не правильно.
на примере (4):
123.00.321

1
12
123
3
32
321
14 mxs089
 
13.05.13
16:11
(10) а ты проверил?
15 drcrasher
 
13.05.13
16:13
(10) ну а ваще илилилилили в условии - изврат. код символа или поиск по строке - не вариант аще?
16 Лефмихалыч
 
13.05.13
16:16
http://www.catonmat.net/blog/wp-content/uploads/2009/12/yo-dawg-regex.jpghttp://www.catonmat.net/blog/wp-content/uploads/2009/12/yo-dawg-regex.jpg


RE = New COMObject("VBScript.RegExp");
RE.Global        = истина;
RE.IgnoreCase    = истина;
RE.Multiline    = истина;
RE.Pattern = "\d+";

Сообщить("Совпадения:");
Попытка
   Для каждого Match Из RE.Execute(Строка) Цикл
       Сообщить(""+Match.Value+" @ "+Match.FirstIndex);
   КонецЦикла;
Исключение
   Сообщить(ОписаниеОшибки());
КонецПопытки;
17 mxs089
 
13.05.13
16:17
(13) странный у тебя результат, 123.00.321 результат:

1123
00
18 mxs089
 
13.05.13
16:18
(16) через рег. выр. супер ...
19 drcrasher
 
13.05.13
16:20
(17) почему?
20 mxs089
 
13.05.13
16:20
(16) в практике часто используешь?
21 mxs089
 
13.05.13
16:20
(19) проверь сам
22 ЗлобнийМальчик
 
13.05.13
16:20
(16) а если сервер крутится на линуксе - тоже сработает?
23 palpetrovich
 
13.05.13
16:21
(17) хм, я-бы сказал у тебя - странный :)
где в "123.00.321" число 1123?
24 mxs089
 
13.05.13
16:22
(23) ты проверь, два раза 1, т.к. цикл с 0 начинается
25 drcrasher
 
13.05.13
16:23
(21) проверил. считай, что описана половина алгоритма формирования словаря LZH.
и 00 - не имеет смысла включать
26 palpetrovich
 
13.05.13
16:23
имхо задача не решается в общем случае, надо хотя-бы знать ЗначениеРазделителяДробнойЧасти и "количество знаков после запятой"

разве что автору просто нужен массив встречающихся цифр в строке :)
27 Лефмихалыч
 
13.05.13
16:23
(20)  постоянно
(22) это половой вопрос того, кто на линуксе сервера разворачивает, но для линукса решений еще больше, чем для винды, кроме того Орефков давеча ВК нарисовал, а у ней NativeAPI с похером на линухи эти ваши
28 DimG
 
13.05.13
16:26
(15) 1сники такие программисты, прямолинейные. Как думают так и пишут :)
29 mxs089
 
13.05.13
16:26
(27) а по скорости, регулярное выражение выполняется разве не медленней, чем тот же цикл?
30 orefkov
 
13.05.13
16:26
(27)
Ну, для линуха я еще не допилил, но надеюсь к концу мая доделаю, после ИС-ивента.
31 orefkov
 
13.05.13
16:27
(29)
По скорости регулярка порвет 1Сный цикл в нано-лоскуты.
32 Лефмихалыч
 
13.05.13
16:29
(29)  не медленней
(30) все равно это проблемы тех, кого не устраивает венда и вариантов таки масса
33 Адинэснег
 
13.05.13
16:31
Функция ЧислаВСтроке (СтрокаПоиска)
   
    МассивЧисел = Новый Массив;
    ЧислоСтрокой = "";
   
    Для н=1 По СтрДлина(СтрокаПоиска) Цикл
        Цифра = Сред(СтрокаПоиска, н, 1);
        КодЦиф = КодСимвола(Цифра);
        Если КодЦиф >47 И КодСимвола(КодЦиф)<58 Тогда
           
            ЧислоСтрокой = ЧислоСтрокой + Цифра;
        Иначе
            Если ЗначениеЗаполнено(ЧислоСтрокой) Тогда
            МассивЧисел.Добавить(ЧислоСтрокой);
            ЧислоСтрокой = "";
            КонецЕсли;
           
        КонецЕсли;
    КонецЦикла;
   
     Если ЗначениеЗаполнено(ЧислоСтрокой) Тогда
        МассивЧисел.Добавить(ЧислоСтрокой)
    КонецЕсли;

    Возврат МассивЧисел;
КонецФункции
34 mxs089
 
13.05.13
16:32
(33) тебе уже написали решение (16)
35 Адинэснег
 
13.05.13
16:39
(34) понятия не имею, где код работать будет
36 mxs089
 
13.05.13
16:41
(35) ты хоть проверил?
37 Адинэснег
 
13.05.13
16:49
(35) некогда :-D