![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
al1ve |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
здравствуйте. подскажите пожалуйста алгоритм или программный код для поиска слова в введённом тексте, как например в Word`е для Delphi. я нашёл что-то но это кажись для СИ и не совсем то - http://base.vingrad.ru/view/2582-Algoritm-...ih-slov-v-fayle.
Это сообщение отредактировал(а) al1ve - 15.2.2011, 18:16 |
|||
|
||||
superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 7 Всего: 15 |
По ссылке - модуль для Делфи.
Не совсем ясна задача. Может тебе функции pos хватит? |
|||
|
||||
al1ve |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
напомни для чего она. в текстовом поле набран произвольный текст (не абракадабра). при нажатии кнопки "обработать" программа должна найти в набранном тексте "плохие" слова и заменить их на слово типа "<cenosored>". проще говоря - мат-фильтр =)
|
|||
|
||||
meteor2312 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 49 Регистрация: 19.11.2010 Репутация: нет Всего: нет |
Используй pos, delete, insert.
pos - определить положение подстроки в строке (возвращает порядковый номер первой буквы подстроки), delete - удаляет подстроку из строки, insert - вставляет подстроку в строку. Для подробного изучения гугл тебе в помощь ![]() |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Не используй pos, delete, insert, используй StringReplace
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
al1ve |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
хорошо, попробую. спасибо за помощь)
|
|||
|
||||
superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 7 Всего: 15 |
||||
|
||||
al1ve |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
а искать плохие слова внутри слов так же? или уже самому придётся думать? например когда вот так - кошканоссобака. как замаскировать в данном примере например слово "нос"?
|
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Регулярки для замены слов? Конкретных слов, кстати. Да ты шо..?
al1ve, ты про StringReplace читал вообще? Про тот же pos читал? Почитай, не будет таких вопросов. Текст в Дельфи (да и в других языках так же) не делится на слова. Пробел - это такой же символ как и "а". Так что функциям будет все равно, подсунешь ты им "кошканоссобака" или "кошка нос собака". "нос" найдет в любом случае. А вот если тебе нужно именно отдельно слово "нос" найти, то нужно применять хитрость и искать в тексте не "нос", а " нос " и варианты, типо " нос.", " нос," и т.д. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
тогда регулярки в помощь) -------------------- There are always someone smarter than you... |
|||
|
||||
superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 7 Всего: 15 |
||||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Я обычно применяю регулярки когда нужно что-то по маске найти, "вырвать" из текста что-нибудь, подходящее по критерию, вывести текст в определенном формате. А когда нужно просто заменить одно слово на другое, то зачем усложнять проект регулярками, если есть стандартные функции?
Итить. Для "найти" pos в помощь. Для "заменить" - StringReplace. Что ж вы так эти регулярки полюбили-то? -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 16 Всего: 54 |
А почему ты их не любишь? ведь для поиска они дают больше возможностей чем pos. -------------------- Кольцов Виктор Владимирович |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
l'arbre - это одно слово или два?
Это два в французском, но одно слово в английском. Это я к тому, что граница слова - довольно сложное понятие. Даже если ограничиться только русским, то в нём также найдётся место для импортированных слов. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Зачем мне больше возможностей, когда мне надо мат заменить на "<cenosored>"? Т.е. одно слово заменить на второе. Как с пушки по воробьям.
А какая разница? Если нам надо его заменить полностью, то и сбиваем его в StringReplace полностью. Если частично, то вбиваем часть. И, по сути, нам по барабану одно тут слово или два. Мы работает с текстовой строкой, а не со словами и предложениями. Регулярки нужны когда надо действительно сложные операции с текстом сделать. А когда простая замена одного слова на другое... Вы пиво открыть тоже МЧС вызываете со спец. оборудованием или все же открывалкой пользуетесь? -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 16 Всего: 54 |
а по моему это как раз не воробьи как понять это отдельное слово или часть другого слова и его не надо заменять..
с помощью регулярок проще учесть варианты, разве нет? ИМХО в простом варианте(лабораторная, курсовая) StrReplace - лучшее решение, но если нужно что то серьезно то регулярки упростят работу Это сообщение отредактировал(а) Frees - 17.2.2011, 09:25 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
-------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
А такая, что по формулировке задачи надо слово менять на слово. Не набор букв, а слово. Как ты поменяешь слово на слово, если ты не определишь границы слова. Вот ' надо считать разделителем слов или нет? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Poseidon |
|
||||||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
Я конечно за автора говорить не буду, возможно он имел ввиду именно слова по отдельности искать. Но по заявленному можно судить что ему как-раз набор букв, составляющих слово, и надо. Word ищет набор букв и найдет его даже посреди слова, пример со словом "нос" это только доказывает. Так что по формулировке задачи нужно набор букв поменять на набор букв. Другое дело что эти наборы составляют вполне осмысленные слова. В первом случае мат, во втором "<cenosored>". Но это уже для нас не важно. -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
||||||
|
|||||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Изначально он спрашивал про отдельные слова, а потом передумал. -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
al1ve |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
тогда как сделать чтобы искал и отдельные слова, и внутри слов как в Word`е? Word использует Pos?
|
|||
|
||||
Poseidon |
|
|||
![]() Delphi developer ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 5273 Регистрация: 4.2.2005 Где: Гомель, Беларусь Репутация: 9 Всего: 133 |
То, что использует Word мы не знаем. Но по результату так как-раз что-то похожее на pos
![]() -------------------- Если хочешь, что бы что-то работало - используй написанное, если хочешь что-то понять - пиши сам... |
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Ну ты может определишься, чего тебе надо? Всё же отдельные слова или не отдельные слова? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
al1ve |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
просто плохие слова могут ещё "прятаться" внутри нормальных слов. поэтому хотелось бы и так - чтобы находил ещё и внутри слов=)
|
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 29 Всего: 89 |
Это сообщение отредактировал(а) CodeMonkey - 18.2.2011, 20:49 -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Frees |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2233 Регистрация: 2.12.2005 Где: Екатеринбург Репутация: 16 Всего: 54 |
'блестящая бляха' -> 'блестящая <censored>ха' разве это правильно? или это не важно... Это сообщение отредактировал(а) Frees - 18.2.2011, 21:38 -------------------- Кольцов Виктор Владимирович |
|||
|
||||
Keeper89 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2580 Регистрация: 26.2.2009 Репутация: 9 Всего: 58 |
Не понятно, о чем вы спорите.
Если рассматривать последний случай, то проще сделать через регулярки, используя словарь "похожих" слов: Нашли match[1] - нашу "плохую" вставку, смотрим, нет ли match[0] в списке и реплайсим. Если все равно, что менять, решение вот:
А ТС нужно привести все случаи замены очень подробно. Это сообщение отредактировал(а) Keeper89 - 18.2.2011, 22:09 |
|||
|
||||
al1ve |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 20.11.2008 Репутация: нет Всего: нет |
неправильно. потом сделаю "белый" и "чёрный" списки. а пока так Это сообщение отредактировал(а) al1ve - 19.2.2011, 15:52 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |