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

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

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.10.2017, 01:14   #1
sokol281
Пользователь
 
Регистрация: 24.10.2017
Сообщений: 15
По умолчанию Удаление строк с вхождением строки

Ребята привет!
Пишу небольшую программку для работы, весь функционал почти готов, но не могу решить одну проблемку, поэтому я тут. Короче выкладываю суть:
Есть элемент Мемо1 в нем строки вида:
автомобиль порше
автомобиль порше найти

Что нужно сделать:
программа должна удалять строку 1 если все слова из нее есть в строке 2


всю голову сломал, ну хз как это сделать
Может здешние ГУРУ подскажут
sokol281 вне форума Ответить с цитированием
Старый 24.10.2017, 06:46   #2
Alexander Gamza
Пользователь
 
Регистрация: 14.06.2017
Сообщений: 31
По умолчанию

Примерно так
Код:
AnsiString SearchStr;

for(int i=0; i<Memo1->Lines->Count; i++){
   SearchStr = Memo1->Lines->Strings[i];
      
        for(int j=i+1; j<Memo1->Lines->Count; j++)
{
          if(Memo1->Lines->Strings[j].Pos(SearchStr))
             Memo1->Lines->Delete(i)

}//end for j
}//end for i
Alexander Gamza вне форума Ответить с цитированием
Старый 24.10.2017, 15:49   #3
sokol281
Пользователь
 
Регистрация: 24.10.2017
Сообщений: 15
По умолчанию

Alexander Gamza большое спасибо! Все работает как и хотел)
Есть нюансы но думаю сам справлюсь))
Alexander Gamza - спасибо!!!!!
sokol281 вне форума Ответить с цитированием
Старый 24.10.2017, 15:53   #4
sokol281
Пользователь
 
Регистрация: 24.10.2017
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Alexander Gamza Посмотреть сообщение
Примерно так
Код:
AnsiString SearchStr;

for(int i=0; i<Memo1->Lines->Count; i++){
   SearchStr = Memo1->Lines->Strings[i];
      
        for(int j=i+1; j<Memo1->Lines->Count; j++)
{
          if(Memo1->Lines->Strings[j].Pos(SearchStr))
             Memo1->Lines->Delete(i)

}//end for j
}//end for i
А что делать если порядок слов немного другой?)
sokol281 вне форума Ответить с цитированием
Старый 24.10.2017, 17:15   #5
sokol281
Пользователь
 
Регистрация: 24.10.2017
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Alexander Gamza Посмотреть сообщение
Примерно так
Код:
AnsiString SearchStr;

for(int i=0; i<Memo1->Lines->Count; i++){
   SearchStr = Memo1->Lines->Strings[i];
      
        for(int j=i+1; j<Memo1->Lines->Count; j++)
{
          if(Memo1->Lines->Strings[j].Pos(SearchStr))
             Memo1->Lines->Delete(i)

}//end for j
}//end for i
Проверка всегда идет по первой строке, и если к примеру в строке 3 есть фраза "порш крутой цена", а строка 1 содержит "порш цена" - удаление не происходит
поможете решить это?))
sokol281 вне форума Ответить с цитированием
Старый 24.10.2017, 18:46   #6
sokol281
Пользователь
 
Регистрация: 24.10.2017
Сообщений: 15
По умолчанию

я понял в чем прикол, проблема в моем коде)
sokol281 вне форума Ответить с цитированием
Старый 24.10.2017, 19:06   #7
sokol281
Пользователь
 
Регистрация: 24.10.2017
Сообщений: 15
По умолчанию

кто нибудь устанавливал данный лемманизатор текста: http://www.solarix.ru/grammatical-dictionary-api.shtml ?
я поставил стемер портера, но он работает только по последнему слову в строке
sokol281 вне форума Ответить с цитированием
Старый 26.10.2017, 20:27   #8
sokol281
Пользователь
 
Регистрация: 24.10.2017
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Alexander Gamza Посмотреть сообщение
Примерно так
Код:
AnsiString SearchStr;

for(int i=0; i<Memo1->Lines->Count; i++){
   SearchStr = Memo1->Lines->Strings[i];
      
        for(int j=i+1; j<Memo1->Lines->Count; j++)
{
          if(Memo1->Lines->Strings[j].Pos(SearchStr))
             Memo1->Lines->Delete(i)

}//end for j
}//end for i
разобрался в данной функции, но она не всегда удаляет все повторения
если порядок слов в строках разный, то не всегда она удаляет строку слова из которой есть в другой строке. Как сделать так чтобы фильтровало так:

Источник:
копать глубокую яму
яму глубокую копать
яму глубокую выкопать яша

Результат
яму глубокую выкопать яша
sokol281 вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка строк - удаление предыдущего символа строки при появлении # a999a1 Паскаль, Turbo Pascal, PascalABC.NET 8 05.12.2013 20:38
Удаление переносов строк из строки.... paravoz1k Общие вопросы Delphi 1 13.08.2011 15:27
удаление строки и смещение остальных строк вверх в StringGrid SPD Общие вопросы Delphi 1 01.08.2011 13:26
Удаление всех строк из RichEdit, начиная с определённой строки ondar Компоненты Delphi 5 07.06.2011 06:48
перенос строк удаление ненужных строк HelperAwM Microsoft Office Excel 5 26.06.2010 18:42