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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.01.2013, 02:10   #1
Raf-9600
Пользователь
 
Регистрация: 10.07.2012
Сообщений: 34
Счастье Специфическое удаление строк из memo

Собсно задача состоит в том, чтобы найти строку в которой есть определённая подстрока и удалить её и все строки после неё.
Я вроде как написал правильный код, но возникает ошибка из-за того что номер строки вычисляется без учета того что в memo работает перенос строк.
Код:
      for i := 0 to memo1.Lines.Count-1 do
      begin
        if Pos('7.2.2.0', memo1.Lines[i]) <>0 then
          for j := memo1.Lines.Count-1 DownTo Pos('7.2.2.0', memo1.Lines[i]) do
            memo1.Lines.Delete(memo1.Lines.Count-1);
      end;
То есть Pos выдает допусти 9 строку, но с учетом того что длинные строки переносятся, эта 9-я строка превращаться в 12-ю и memo1.Lines.Delete удаляет больше строк чем должен.
Raf-9600 вне форума Ответить с цитированием
Старый 22.01.2013, 02:54   #2
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

А зачем вам проход по рядам, если можно искать в строке из свойства Memo1.Lines.Text, после обработки обратно установить новое значение
Код:
var
  Value: string;
begin
  Value := Memo1.Lines.Text;

  // Выполняем действия над строкой
 
  Memo1.Lines.Text := Value;
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 22.01.2013, 08:30   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

а если так изменить исходный код?
Код:
      for i := 0 to memo1.Lines.Count-1 do
      begin
        if Pos('7.2.2.0', memo1.Lines[i]) <>0 then begin
            for j := memo1.Lines.Count-1 DownTo i do
               memo1.Lines.Delete(j);
            break; {всё удалено, больше в цикле делать нечего - выходим}
        end;
      end;
p.s. не проверял...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.01.2013, 11:06   #4
Raf-9600
Пользователь
 
Регистрация: 10.07.2012
Сообщений: 34
По умолчанию

Цитата:
Сообщение от chertovich Посмотреть сообщение
А зачем вам проход по рядам, если можно искать в строке из свойства Memo1.Lines.Text, после обработки обратно установить новое значение
Ну, другой способ обработки (удаления строк) мне в голову не пришёл...

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если так изменить исходный код?
Работает великолепно! Благодарю.
Raf-9600 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строк в Memo qpuTuJlb Помощь студентам 6 01.06.2012 17:17
Удаление лишних строк в memo Gudzik11 Общие вопросы Delphi 7 10.04.2012 06:57
Удаление строк в memo roxy7 Компоненты Delphi 2 16.03.2012 23:07
Удаление строк в Memo Marsel737 Общие вопросы Delphi 8 03.01.2010 10:42
Удаление строк из Memo Leksda Общие вопросы Delphi 6 20.03.2009 15:31