Добрый день. Нужна помощь с такой задачей. Есть БД на 4000 значений состоящих из словосочетаний. Нужно найти предлоги (допустим предлог "с"), и заменить его на предлог с добавкой ("+с" допустим). При этом простая замена не работает чётко, так как может заменять в словах что-то, (допустим слово "доска" замениться на "до+ска"). Подумалось, что можно пустить ограничение, через условный оператор на количество символов, что бы программа находила значение, считала его количество букв в найденном слове, и если оно соответствует заданному критерию, меняла, а если нет - пропускала. Подскажите, как это можно сделать.
тогда откажитесь от затеи или включите смекалку Ведь можно же в отдельный столбец формулой записать значение, добавив спереди и сзади пробелы. Тогда в любом случае можно будет отделить предлоги, опираясь на то, что спереди и сзади предлогов будут пробелы в любом случае. Если не в отдельный столбец и кодом - то, конечно, можно пробелы "имитировать" перед заменой.
Добавлять спереди и сзади добавлять пробелы не вариант, ибо вся база копируется, а вписывать всё в ручную - это проблематично. Отделять предлоги тоже нельзя, в виду того, что должно быть одна ячейка - одна фраза. Ну требование такое. Я это всё обдумал, и единственный вариант как раз кодом и остался.
Sub F()
With CreateObject("VBScript.RegExp")
.Pattern = "(^|\s)с\s"
MsgBox .Replace("доска", " +с ")
MsgBox .Replace("не с ним", " +с ")
MsgBox .Replace("с ним", " +с ")
End With
End Sub
В какие ячейки? Вы нам показали файл, где будет несколько строк с различными данными? А вот для этого нужно следовать Правилам:
Цитата
2.3. Приложите файл(ы) с примером (общим весом не более 100 Кб) в реальной структуре и форматах данных того, что есть сейчас и того, что хотелось бы на выходе.
Юрий М написал: Вы нам показали файл, где будет несколько строк с различными данными?
Пардон, думал и так всё понятно. Пример скинул. Суть вроде бы описал. В ячейках есть словосочетания, в словосочетаниях есть предлоги. Надо найти все предлоги, и заменить, не затронув при этом слова.
Все предлоги, но на примере с я смогу сделать всё остальное. Могу скинуть то, как это должно выглядеть, если надо, просто я уже замучался высматривать в этих строчках хоть что-то:)
Потому, что ищет предлог с пробелом спереди и сзади. Сзади к тексту пробел можно не добавлять, наверное - в русском языке предлог не может быть последним, а спереди надо.
Если искать предлоги без пробелов спереди, то данный алгоритм слово "колесо" превратит в "коле+с+о" (сначала заменит "со" на "+со", а потом последнее "о" на "+о"). А вот для того, что бы найти " без " в вашем "Без руля" мы превращаем его в " Без руля "
Михаил С., фактически может быть и в конце предложения, например когда в приличном обществе посылают кого-нибудь, то часто используют фразу "иди на..." или "иди в...". Или же какой-нибудь авторский текст где автор сознательно искажает построение фразы. Кстати, после предлога может идти знак препинания, например "в этом тексте чаще других встречаются предлоги в, на и с"
Михаил С.,То есть по факту алгоритм выискивает все предлоги с пробелами справа и слева. Но если пробел только справа, то надо в такой предлог внести пробел слева. Ручками. Я правильно понимаю?