|
найти целые числа из строки | ☑ | ||
---|---|---|---|---|
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
|
опять же
http://infostart.ru/public/75941/ |
|||
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
|
ну и вот еще
v8: Массив строк преобразовать в 1 строку. |
|||
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |