:: Visual Foxpro, Foxpro for DOS
Вырезать слова из строки
dfr
Автор

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
Надо из текстовой строки убрать (вырезать) слова. Под словом понимается совокупность только букв разного регистра длиной не менее, например, 4.
В строке могут быть знаки препинания, цифры и т.д.

Может есть у кого готовое решение?
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Если ничего, кроме результата, не важно, то бегите посимвольно от начала к концу строки.
Встречая букву, запоминайте ее позицию, и начинайте считать последовательные буквы.
Как только встретите небукву, то проверьте счетчик и удалите слово (STUFF), если счетчик не меньше требуемого.
И так до конца строки.

Алгоритм наверняка не самый оптимальный - это первое, что пришло в голову.
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
dfr
Надо из текстовой строки убрать (вырезать) слова.
А пример можно?
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
dfr
Автор

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
Ну если например минимальная длина 3, то из:

Протяжённость железных дорог — около 4 тыс. км. Из них 1,1 тыс. км — узкоколейные пути, электрифицировано 283 км (2005).

должно получиться:

— 4 км. Из 1,1 км — 283 км (2005).
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
dfr
Ну если например минимальная длина 3, то из:
Протяжённость железных дорог — около 4 тыс. км. Из них 1,1 тыс. км — узкоколейные пути, электрифицировано 283 км (2005).

должно получиться:

— 4 км. Из 1,1 км — 283 км (2005).

По-моему, результат не соответствует заданию - исчезла часть небукв.
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
Pliskin

Сообщений: 2959
Откуда: Новосибирск
Дата регистрации: 19.11.2003
getwordcount()
getwordnum()
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
dfr
Автор

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
akvvohinc
По-моему, результат не соответствует заданию - исчезла часть небукв.

Ну да, я там удалил еще точки сразу после удаляемых слов, считаю это буквой в слове )
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
dfr
Автор

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
Pliskin
getwordcount()
getwordnum()

В этих функциях можно указать из чего должен состоять выделяемый фрагмент? Мне надо только буквы, ну и точки/запятые (не обязательно), и с минимальной длиной.
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Еще такой способ:
- строим образ исходной строки, а именно CHRTRAN(исх.строка, все возможные буквы, REPICATE("X", сколько возможных букв)) && будет проще искать вхождения понятия "слово для удаления"
- ищем в строке-образе AT() сначала максимальную последовательность "X" (потом меньше и меньше, до 4х, пока не найдем)
- если нашли - удаляем найденное в исходной строке. Если не нашли - то конец цикла
- повторить с шага 1
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
Рома

Сообщений: 1079
Дата регистрации: 06.06.2001
Local lcInput as String
lcInput = "Протяжённость железных дорог — около 4 тыс. км. Из них 1,1 тыс. км — узкоколейные пути, электрифицировано 283 км (2005)."
Local re as VBScript.RegExp
re = CreateObject("VBScript.RegExp")
re.Pattern = "[A-ZА-ЯЁ]{3,}[\.,]?"
re.IgnoreCase = .t.
re.Global = .t.
?re.Replace(lcInput, "")



Исправлено 2 раз(а). Последнее : Рома, 01.11.17 13:48
Ratings: 0 negative/2 positive
Re: Вырезать слова из строки
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
dfr
Pliskin
getwordcount()
getwordnum()

В этих функциях можно указать из чего должен состоять выделяемый фрагмент? Мне надо только буквы, ну и точки/запятые (не обязательно), и с минимальной длиной.
Нет, но кто мешает проанализировать найденное "слово" и если оно не удовлетворяет критериям удаления (короткое, или с цифрами) то оставить его.
Аналогично (возможно более эффективно) можно использовать ALINES() с 3 и последующими параметрами (если версия фокса позволяет, конечно) - эта функция побьёт исходную строку на "слова" по указанным разделителям (их сами можно включать в слова, а можно и сразу выкинуть), а далее в цикле собрать обратно строку, выкидывая то что нужно выкинуть, ну и, возможно, "облагораживая" оставляемые элементы - убирая "пустые" или состоящие только из разделителей (точек/запятых/тире) элементы.
По поводу "цифр" - к примеру слово "H1N1" - это слово из скольки букв? И нужно ли его по алгоритму оставить или убрать, или вообще считать за 2 однобуквенных слова побитых "цифрами"?
В общем ТЗ требует серьёзного уточнения


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
dfr
Автор

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
Рома
Local lcInput as String
lcInput = "Протяжённость железных дорог — около 4 тыс. км. Из них 1,1 тыс. км — узкоколейные пути, электрифицировано 283 км (2005)."
Local re as VBScript.RegExp
re = CreateObject("VBScript.RegExp")
re.Pattern = "[A-ZА-ЯЁ]{3,}[\.,]?"
re.IgnoreCase = .t.
re.Global = .t.
?re.Replace(lcInput, "")

Спасибо! То что и нужно.

А таким же способом можно пробел вставить между знаком препинания и буквой?
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
dfr
Автор

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
Igor Korolyov
По поводу "цифр" - к примеру слово "H1N1" - это слово из скольки букв? И нужно ли его по алгоритму оставить или убрать, или вообще считать за 2 однобуквенных слова побитых "цифрами"?

Цифры нельзя удалять ни в каких вариантах, слова на удаление только без цифр.
Ratings: 0 negative/0 positive
Re: Вырезать слова из строки
Рома

Сообщений: 1079
Дата регистрации: 06.06.2001
dfr
А таким же способом можно пробел вставить между знаком препинания и буквой?

re.Pattern = "[A-ZА-ЯЁ]{3,}(\s*[.,])?"

Почитай о синтаксисе регулярных выражений msdn.microsoft.com
Ratings: 0 negative/1 positive
Re: Вырезать слова из строки
dfr
Автор

Сообщений: 254
Откуда: Барнаул
Дата регистрации: 29.07.2005
Спасибо Роман!

Рома
Почитай о синтаксисе регулярных выражений msdn.microsoft.com

Периодически пытался, не шибко нужно было наверно ...
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика