Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 10.06.2019, 01: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, 11:09   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,257
По умолчанию

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

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

Если обычным поиском, то в несколько проходов.
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, 20:36   #4
ac1-caesar
Форумчанин
 
Регистрация: 26.07.2013
Сообщений: 134
По умолчанию

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

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

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

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

Цитата:
Сообщение от Вождь Посмотреть сообщение
Если макросами, то через RegExp.
Если можно, пример.
ac1-caesar вне форума   Ответить с цитированием
Старый 10.06.2019, 22: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 в 22:20.
ac1-caesar вне форума   Ответить с цитированием
Старый 11.06.2019, 00:24   #8
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,257
По умолчанию

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

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

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


06:17.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.