|
Найти все целые числа в строке | ☑ | ||
---|---|---|---|---|
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
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |