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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2015, 14:15   #1
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию Удалить строки из Memo

Добрый день!
Скажите, пожалуйста, как удалить строки из Memo в цикле?
Есть некоторые строки в Memo, которые периодически повторяются.
Memo1
Connect
~DEC/08/2051 12:16:01
Name: Sername:
Ward: Age:
SD (10) (1640)
Необходимо удалить все строки между строками Memo1 и Ward: Age:
Строка Memo1 не всегда первая и количество строк между строками Memo1 и Ward: Age: всегда разное.

Написан такой код, но он удаляет только первые найденные строки, а надо все.
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
i:=0; //найдем строку за которой удалять
while Memo1.Lines[i]<>'Memo1'do inc(i);//нашли Memo1
j:=i+1; //после нее удаляем
while Memo1.Lines[j]<>'Ward: Age: 'do //до строки Ward: Age: 
Memo1.Lines.Delete(j);
end;

Последний раз редактировалось Streb; 15.12.2015 в 14:30.
Streb вне форума Ответить с цитированием
Старый 15.12.2015, 14:27   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Вы или программу не ту привели, или пример неудачный выбрали!

в коде:
Цитата:
Код:
while Memo1.Lines[i]<>'01'do inc(i);//нашли
while Memo1.Lines[j]<>'05'do //до строки 05
где в примере строка '01' и строка '05' ?


а так, я бы поступил просто. цикл по строкам, начиная от последней строки.
если наткнулись на строку==конец фрагмента, то установили переменную.
если наткнулись на строку==начало фрагмента и переменная установлена - удаляем всё между и сбрасываем переменную.
повторяем, пока не дойдём до первой строки Memo1

финита.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 15.12.2015, 14:31   #3
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы или программу не ту привели, или пример неудачный выбрали!

в коде:


где в примере строка '01' и строка '05' ?


а так, я бы поступил просто. цикл по строкам, начиная от последней строки.
если наткнулись на строку==конец фрагмента, то установили переменную.
если наткнулись на строку==начало фрагмента и переменная установлена - удаляем всё между и сбрасываем переменную.
повторяем, пока не дойдём до первой строки Memo1

финита.
Отредактировал...
Можно пример?
Streb вне форума Ответить с цитированием
Старый 15.12.2015, 16:00   #4
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
i:=0;// начнем сначала
while i<Memo1.Lines.count do begin //просмотрим все до конца
  //найдем строку за которой удалять
  while (i<Memo1.Lines.count) and (Memo1.Lines[i]<>'Memo1') do inc(i);//нашли Memo1
  i:=i+1; //после нее удаляем
  while (i<Memo1.Lines.count) and (Memo1.Lines[i]<>'Ward: Age: ') do //до строки Ward: Age: 
  Memo1.Lines.Delete(i);
  i:=i+1;//оставим эту строчку и "пойдем искать дальше"
end;
Код:
i:=0;// начнем сначала
startdelete:=-1; //какую строку будем удалять
while i<Memo1.Lines.count do begin //просмотрим все до конца
  //найдем строку за которой удалять
  if Memo1.Lines[i]='Memo1' then startdelete:=i+1; //будем удалять со следующей
  if Memo1.Lines[i]='Ward: Age: ' then startdelete:=-1; // все больше не удаляем
  if i=startdelete then Memo1.Lines.Delete(i) 
  else i:=i+1;//оставим эту строчку и "пойдем искать дальше"
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 15.12.2015 в 16:12.
evg_m вне форума Ответить с цитированием
Старый 16.12.2015, 10:12   #5
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Еще один вопрос, как удалить последние 4 строки из memo?
Streb вне форума Ответить с цитированием
Старый 16.12.2015, 10:19   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
....
if i>=memo1.lines.count -4 then startdelete:=i;
if i=StartDelete then ....
Код:
while (i<memo1.lines.count) and (i>=memo1.lines.count-4) do ....
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 16.12.2015 в 10:22.
evg_m вне форума Ответить с цитированием
Старый 16.12.2015, 10:26   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
for i:=memo1.lines.count-1 downto memo1.lines.count-4 do
  if i>=0 then Memo1.Lines.Delete(i);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2015, 17:55   #8
Streb
Пользователь
 
Регистрация: 03.06.2009
Сообщений: 76
По умолчанию

Благодарю за помощь!
Streb вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить нечетные числа в Memo manik136 Общие вопросы Delphi 1 22.01.2014 21:59
как удалить последнюю строку в Memo? annapro C++ Builder 3 04.06.2011 21:02
Даны строки S и S0. Удалить из строки S все подстроки, совпадающие с S0 . Если совпадающих подстрок нет, Шпунюся Помощь студентам 1 16.12.2010 21:02
Удалить пустые строки из Memo W0LF Общие вопросы Delphi 4 11.09.2010 16:52
Удалить из Memo повторяющиеся строки Etar Компоненты Delphi 2 28.06.2007 18:34