Имя: Пароль:
1C
1С v8
найти целые числа из строки
,
0 tg30000
 
10.05.12
12:46
Подскажите что-то запутался..
Имеется строка, в ней нужно найти целые числа..








Процедура ПриНачалеРаботыСистемы()
   
   Предупреждение( КоличествоЦелыхЧиселВСтроке() );
   
КонецПроцедуры

Функция КоличествоЦелыхЧиселВСтроке()
   
   СтрокаПоиска ="6f07 only 8after 74 75 310а";
   КоличествоСимволовСтроки = СтрДлина(СтрокаПоиска);
   Для  Счетчик=1 По КоличествоСимволовСтроки Цикл
       ВыбираемыйСимвол=Сред(СтрокаПоиска,Счетчик,1);
       
       КодСимвола = КодСимвола(ВыбираемыйСимвол);
               
       Сообщить(ВыбираемыйСимвол);
       
           КонецЦикла;
   
КонецФункции
1 Ненавижу 1С
 
гуру
10.05.12
12:47
я нашел такие: 6 0 7 8 7 4 7 5 3 1 0 - всего 11 чисел
2 tg30000
 
10.05.12
12:49
(1) не пойму как проверит посимвольно из строки является символ числом или нет, вот в чем вопрос.
3 Ненавижу 1С
 
гуру
10.05.12
12:50
Если Найти("0123456789",Символ)>0 Тогда
4 Wobland
 
10.05.12
12:50
(2) КодСимвола() МЕЖДУ НеПомнюЧем
5 ZanderZ
 
10.05.12
12:51
ну или так :)
Попытка
  ч = Число(ВыбираемыйСимвол);
Исключение
КонецПопытки;
6 vmv
 
10.05.12
12:52
"ИзСтрокиТолькоЦифры" типовые > глобальный поиск

не нада писать г-код, придерживайтесь стандартов, какими бы кривыми они не казались
7 vmv
 
10.05.12
12:53
(5) рассрелять бы тебя)
8 Dmitry77
 
10.05.12
12:53
прикол в том, что 310 тоже целое число в (1), и цифры из которых он состоит - тоже целые числа,

я бы тупо перебрал все подстроки - каждую из них форматировал в число через попытка - исключение, а потом из них отобрал бы целые
9 tg30000
 
10.05.12
12:53
(3) (4) (5) (6)Спасибо большое , разобрался теперь
10 Ненавижу 1С
 
гуру
10.05.12
12:54
(8) я в курсе, но он же не пишет точную постановку
11 Маркетолог
 
10.05.12
12:54
А 75 считается за целое число ?
12 tg30000
 
10.05.12
12:55
На вход подается
произвольная строка, фуннкция должна вернуть количество целых чисел в ней
Целое число – последовательность символов, содержащая только цифры (отрицательные
числа учитывать не требуется). При этом числа должны разделяться пробелами.
Например, строки "10.5" и "число15" не содержат целых чисел.
13 Wobland
 
10.05.12
12:55
а ещё можно СтрЗаменить все нецифры на пробелы, разложить в многострочную строку, поудалять оттуда пустые строки...
14 tg30000
 
10.05.12
12:56
Стараюсь сделать по следующему принципу, пока не получается...

В этой задаче можно использовать два вложенных цикла. В первом последовательно перебирать символы строки и сравнивать их с числом. Для сравнения символа с числом можно воспользоваться функцией КодСимвола(). После того как получили первое число и если слева есть пробел запускать второй цикл, в котором последовательно проверять следующие символы и смотреть являются ли они числом. Если найденные символы числа и справа есть пробел, то найдено целое число. Счетчик чисел увеличить на 1.
15 Dmitry77
 
10.05.12
12:56
(12) исходя из этой постановки решение телепаты не угадали.
16 Wobland
 
10.05.12
12:56
(12) раскладывай в массив через пробелы, потом попыткой со счётчиком. просто.
17 Wobland
 
10.05.12
12:57
+(16) и ещё: Если Цел(а)=а Тогда ЯвляетсяЦелым
18 tg30000
 
10.05.12
12:58
Ок! Всем Спасибо за посильную помощь)
19 tg30000
 
10.05.12
13:09
Что-то не пойму если писать
ВыбираемыйСимвол=Сред(СтрокаПоиска,Счетчик,1);
то ВыбираемыйСимвол является строкой? как сделать проверку типа , число это или нет?

Если Тип("Число")=ТипЗнч(ВыбираемыйСимвол) Тогда - не правильно же?
20 ZanderZ
 
10.05.12
13:13
(19) в (9) за что спасибо то сказал ?:)
21 tg30000
 
10.05.12
13:14
(20) ну все при работе выявляется ,начал просто сейчас делать, появились вопросы.
22 ZanderZ
 
10.05.12
13:16
(21) самое простое в (3) используй пока это
23 СвинТуз
 
10.05.12
13:17
строка="6f07 only 8after 74 75 310а";
   колЧисел=0;  ИзАльфа=Ложь;
   Для ии=1 по СтрДлина(строка) Цикл
       Символ=Сред(Строка,ии,1);
       Если (Символ>="0") И (Символ<="9") Тогда
           Если НЕ ИзАльфа Тогда
               колЧисел=колЧисел+1;
           КонецЕсли;
           ИзАльфа=Истина;
       Иначе
           ИзАльфа=Ложь;
       КонецЕсли;
   КонецЦикла;
   Сообщить("Количество целых числительных = "+колЧисел);
24 tg30000
 
10.05.12
13:21
Буду делать .Ок.
25 СвинТуз
 
10.05.12
13:23
а чего тут делать то?
код что ли кривой?
быстрее не будет
26 tg30000
 
10.05.12
13:24
(25) Все верно Вы привели, я думаю как сделать :

Целое число – последовательность символов, содержащая только цифры (отрицательные
числа учитывать не требуется). При этом числа должны разделяться пробелами.
Например, строки "10.5" и "число15" не содержат целых чисел.
27 tg30000
 
10.05.12
13:25
Должно вывестись 2 числа.( 74 и 75)
28 СвинТуз
 
10.05.12
13:26
а так что ли?
ну счас
29 СвинТуз
 
10.05.12
13:26
фигня вопрос
30 Fragster
 
гуру
10.05.12
13:26
Регулярка(\s|^)\d+(\s|$)
31 aleks-id
 
10.05.12
13:27
уже третий по счету...
32 Fragster
 
гуру
10.05.12
13:30
(31) я хз, не читатель. Но для поиска такого вот - это наибыстрейший и наичитабельнейший (легко сопровождаемый) вариант.
33 СвинТуз
 
10.05.12
13:47
строка="6f07 only 8after 74 75 310а";
   Строка2=СтрЗаменить(строка," ",Символы.ПС);
   колЧисел=0;
   Для ж=1 по СтрЧислоСтрок(Строка2) Цикл
       Стр=СтрПолучитьСтроку(Строка2,ж);
       ЕстьЦифры=Ложь; Цифра=Истина;
       Для ии=1 по СтрДлина(стр) Цикл
           Символ=Сред(Стр,ии,1);
           Если (Символ>="0") И (Символ<="9") Тогда
               ЕстьЦифры=Истина;
           Иначе
               Цифра=Ложь;
           КонецЕсли;
       КонецЦикла;
       Если ЕстьЦифры и Цифра Тогда
           колЧисел=колЧисел+1;
       КонецЕсли;
   КонецЦикла;
   Сообщить("Количество целых числительных = "+колЧисел);
34 tg30000
 
10.05.12
13:51
(33) все работает!
Спасибо огромное, буду разбираться вечером для понимания.

Подскажите как лучше по 1с учиться, я начал с 1с Быстрый старт (Гилева), что еще порекомендуете?)
35 СвинТуз
 
10.05.12
13:52
хз

я вообще фокпро учил
36 tg30000
 
10.05.12
13:54
(35)
Спасибо)
37 СвинТуз
 
10.05.12
13:54
*фокспро

а вообще смотрите литературу по потребности

мне проще я программировать научился до прихода в 1с
на чем тут новички учатся даже не знаю

сейчас вообще часто люди предметную область знают и имеют деньги
а писать вроде как и не обязательно )))
такой вот расклад
38 СвинТуз
 
10.05.12
13:56
и вообще чем дальше
тем меньше кодеров как таковых )))
удачи
39 tg30000
 
10.05.12
13:58
(38)
Этим нужно жить, в плане профессии что бы стать действительно хорошим специалистом,ведь если сам хочешь что-то добиться и интерес есть то все получится)
Спасибо еще раз !
Вам тоже всего хорошего)
41 Fragster
 
гуру
10.05.12
13:59
а регулярные выражения всё равно знать надо, вдруг они в 1с таки появятся
42 СвинТуз
 
10.05.12
14:04
(41)
ну некоторые например любят рекурсию
а я например даже не знаю что это такое
как на мехмате -1 бал на практике получил
вместе с популярным объяснением ,
что рекурсия для ленивых идиотов ...
и почему для них
так сразу и забыл о ней
зато узнал что такое ресурсы
а некоторые любят )
тут от многого зависит )))
даже при приеме на работу ее дают
43 СвинТуз
 
10.05.12
14:05
жизнь многообразна
44 aleks-id
 
10.05.12
15:10
(32) я про тему. две точно таких же было уже.
v8: Подсчет целых чисел в строке
вторую не могу найти, и третья наподобие
Разделить цифры в числе пробелами
45 Fragster
 
гуру
10.05.12
15:28
(42) если сравнишь (30) и (33) на строках > 100 символов, то (30) будет быстрее.
46 Fragster
 
гуру
10.05.12
15:28
(45)+ и чем больше строка - тем разница будет больше
47 СвинТуз
 
10.05.12
17:41
(45)
ты вообще о чем?

Регулярка(\s|^)\d+(\s|$)

это вообще о чем? я наверное не в теме = я не понимаю
что то из области фантастики?
48 Fragster
 
гуру
10.05.12
17:43
(47) ну, типа того. офигенная тема для манипуляции со строками.
wiki:%D0%E5%E3%F3%EB%FF%F0%ED%FB%E5_%E2%FB%F0%E0%E6%E5%ED%E8%FF
Книга знаний: Использование регулярных выражений (RegExp) в 1С
49 СвинТуз
 
10.05.12
17:44
не я подозреваю что лет через пять оно обязательно
начнет работать на 1с и на строке длиннее 100 символов будет давать
большую скорочть чем длинный код
сейчас то как работает?
50 Fragster
 
гуру
10.05.12
17:45
52 Fragster
 
гуру
10.05.12
17:45
53 СвинТуз
 
10.05.12
17:46
гы ... да ты озверел что ли?
ради этих слез по выигрышу скорости целый комобъект подключать?

ну развлекайся если есть желание
54 СвинТуз
 
10.05.12
17:46
я уже перерос
55 Fragster
 
гуру
10.05.12
17:46
(53) ну, у тебя видимо, не было затыка именно в скорости обработки строк.
56 СвинТуз
 
10.05.12
17:49
(55)
не знаю ... никогда не тормозило
именно на строках
все больше на обращению к серверам
при больших запросах
57 Fragster
 
гуру
10.05.12
17:49
(55)+ а когда в документе >100к серийных номеров, то хранить их можно только как строку с разделителями. даже примитивный ПолучитьМассивИзСтроки принимает вид не совсем эстетичный:

ЗначениеИзСтрокиВнутр("{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,{0,{""S"",""" + СтрЗаменить(СтрЗаменить(Строка, """", """"""), Разделитель, """},{""S"",""") + """}}}")
58 Fragster
 
гуру
10.05.12
17:51
59 СвинТуз
 
10.05.12
17:52
на фоксе тоже было время ради работы с каталогами
бейсиковские объекты подключал
красиво было писать )))
пару циклов в одну строку вмещал = круто

а потом как то потерялся этот комобъект
то ли винду поменяли ... то ли способ подключения ...
весело было
60 Fragster
 
гуру
10.05.12
17:56
(59) ну, выпилить WSH из винды достаточно сложно
61 СвинТуз
 
10.05.12
17:59
(60)
ну пользуйте конечно
тем более это еще один способ сбить со следа конкурентов, и последователей ,
которые не в курсе методов этого объекта
62 Fragster
 
гуру
10.05.12
18:10
(61) использование (30) только сократит и упростит код.
Извраты типа (57)(58) сделаны от безысходности. (57) на строке, которая в 50к массив должна разложиться дает выигрыш около 300 раз
63 Kreont
 
10.05.12
18:16
2 + 2 = 3.9999999999999999999999999999999...