Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2019, 00:03   #1
ac1-caesar
Форумчанин
 
Регистрация: 26.07.2013
Сообщений: 134
По умолчанию Найти число в промежутке от 0 до 20

Уважаемые форумчане,

Пожалуйста, подскажите как найти число в промежутке от 0 до 20 (поиск по всему документу)? Условие нахождения - точное совпадение.
К примеру в тексте присутствует - "остаток до запланированного визита 15 дней, следующий визит через 183 дня".
Здесь небходимо найти точное совпадение от 0 до 20, т.е. число 15 из текста "15 дней", но не 183, потому как сочетание чисел 18 (попадающие под условие) здесь тоже присутствует.
Спасибо.
ac1-caesar вне форума Ответить с цитированием
Старый 10.06.2019, 10:09   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Очень специфичная задача.
Имхо, это можно сделать только программно (например, макросом на VBA)

суть алгоритма такая - выделяете все числа из теста, потом анализируйте - подходит или нет.
Надо решить
1) что делать с найденными результатами поиска
2) что делать, если число является частью слова или дробное (например, каб.12 или 19.17 подходит)?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.06.2019, 11:47   #3
Вождь
Форумчанин
 
Аватар для Вождь
 
Регистрация: 29.09.2008
Сообщений: 378
По умолчанию

Если обычным поиском, то в несколько проходов.
1. Открываем поиск и активируем флаг "Подстановочные знаки".
2. Ищем числа от 0 до 9. Найти: <[0-9]>
3. Ищем числа от 10 до 19. Найти: <1[0-9]>
4. Ищем число 20: <20>

Если макросами, то через RegExp.

Конечно, надо учитывать контекст (текст, где ищем). Возможно, как сказал Serge_Bliznykov, придется дать точное определение отдельно стоящего числа, если вас не устраивают находки типа: 10.10.2000 (10) +10 и т. д.
Макросы на заказ и готовый пакет - http://mtdmacro.ru/
Вождь вне форума Ответить с цитированием
Старый 10.06.2019, 19:36   #4
ac1-caesar
Форумчанин
 
Регистрация: 26.07.2013
Сообщений: 134
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) что делать с найденными результатами поиска
2) что делать, если число является частью слова или дробное (например, каб.12 или 19.17 подходит)?
1) задача проста - окрасить шрифт в цвет
2) указанные примеры не подходят. Точки или запятые или какие-либо другие знаки ни перед числом ни после не должны быть.
Но нужен пример, макроса. Не силен в VBA ворда

Последний раз редактировалось ac1-caesar; 10.06.2019 в 22:44.
ac1-caesar вне форума Ответить с цитированием
Старый 10.06.2019, 19:47   #5
ac1-caesar
Форумчанин
 
Регистрация: 26.07.2013
Сообщений: 134
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Если обычным поиском, то в несколько проходов.
Да, обычным поиском, но найти именно числа в заданном промежутке.

Последний раз редактировалось ac1-caesar; 10.06.2019 в 20:01.
ac1-caesar вне форума Ответить с цитированием
Старый 10.06.2019, 20:19   #6
ac1-caesar
Форумчанин
 
Регистрация: 26.07.2013
Сообщений: 134
По умолчанию

Цитата:
Сообщение от Вождь Посмотреть сообщение
Если макросами, то через RegExp.
Если можно, пример.
ac1-caesar вне форума Ответить с цитированием
Старый 10.06.2019, 21:08   #7
ac1-caesar
Форумчанин
 
Регистрация: 26.07.2013
Сообщений: 134
По умолчанию

Использую такую конструкцию для нахождения любого числа длительностью в 10 знаков - " [0-9]{1;10} " либо указав пробелы явно "([ ^s]{1;})([0-9]{1;10})([ ^s]{1;})".
Минус в том, что не всегда пробел до и после числа.
Но как найти число в заданном промежутке, пока вопрос. Возможно макрос решит данную ситуацию, но очень слабо владею синтаксисом VBA в ворде.

Последний раз редактировалось ac1-caesar; 10.06.2019 в 21:20.
ac1-caesar вне форума Ответить с цитированием
Старый 10.06.2019, 23:24   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от ac1-caesar Посмотреть сообщение
Точки или запятые или какие-либо другие знаки ни перед числом ни после не должны быть.
Цитата:
Сообщение от ac1-caesar Посмотреть сообщение
Минус в том, что не всегда пробел до и после числа.
Простите, а что есть - если не другие знаки и не пробел?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.06.2019, 09:12   #9
ac1-caesar
Форумчанин
 
Регистрация: 26.07.2013
Сообщений: 134
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Простите, а что есть - если не другие знаки и не пробел?!
По сути, чтобы определить какой набор чисел мы должны считать искомым числом, то конечно его должны разрывать пробелы с обеих сторон. Однако есть и такие случаи, когда предложение начинается с этого числа, т.е. перед ним нет пробела. И бывает, что число заканчивает предложение, т.е. после числа точка или продолжает запятой.
В принципе можно вычислить закономерность окончания набора чисел - либо пробел, либо любой знак плюс пробел.
Закономерность начала числа наверное сложнее - понятно, что это пробел и непонятно какой еще знак.
ac1-caesar вне форума Ответить с цитированием
Старый 11.06.2019, 09:32   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
Найти число в промежутке от 0 до 20
018 попадает в промежуток?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО] Prolog: Вычислить значеник функции y=x^2+6*x-5 в промежутке от N до 2*N с шагом 2 . N - натуральное число, вводимое с клавиатуры AnnaSub Помощь студентам 2 22.05.2019 10:52
На заданном числовом промежутке требуется найти все числа, являющиеся парой близнецов ZigaBr0 Паскаль, Turbo Pascal, PascalABC.NET 1 29.08.2016 15:41
На заданном числовом промежутке требуется найти все квадратные числа с убывающими слева направо цифрами / Pascal ABC Veronika_13 Помощь студентам 22 04.07.2014 22:27
Pascal.Найти в промежутке от a до b число, с максимальной суммой делителей. I3ECJI0 Помощь студентам 2 16.05.2012 15:39