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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.06.2009, 11:34   #1
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию как удалять построчно в TMemo

день добрый, вопрос, как можно из компонента ТМемо удалять построчно, и как только найдена строка состоящая только из символа (например слово "ZR" ) скопировать 3ю и 15 строку в компонент ТMemo2, затем опять начать удалять построчно и так далее до следующего ZR там также скопировать 3, 15 ит.д и т.п.
MixanMM вне форума Ответить с цитированием
Старый 25.06.2009, 11:57   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чем примеры в http://www.programmersforum.ru/showthread.php?t=54590
не устроили?

P.S. учти тема кросспостная, есть все основания закрыть, так что ответ давай адекватный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.06.2009, 11:58   #3
Ntlegend
Форумчанин
 
Аватар для Ntlegend
 
Регистрация: 12.05.2007
Сообщений: 373
По умолчанию

Memo1.Lines.Delete(i);

Memo2.Lines.Add(Memo1.Lines.Strings[i])

...
Перемен! - требуют наши сердца. Перемен! - требуют наши глаза.
В нашем смехе и в наших слезах, И в пульсации вен:
"Перемен!Мы ждем перемен!"
Ntlegend вне форума Ответить с цитированием
Старый 25.06.2009, 12:02   #4
Terran
Участник клуба
 
Аватар для Terran
 
Регистрация: 28.11.2007
Сообщений: 1,521
По умолчанию

Цитата:
как можно из компонента ТМемо удалять построчно
Код:
Memo1.Lines.Delete(3);
Цитата:
и как только найдена строка состоящая только из символа (например слово "ZR" ) скопировать 3ю и 15 строку в компонент ТMemo2
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var
I: Integer;
Begin
Repeat
Begin
For I:=0 To Memo1.Lines.Count-1 Do
If Pos('ZR',Memo1.Lines.Strings[I])>0 Then
Begin
Memo2.Lines.Add(Memo1.Lines.Strings[2]);
Memo2.Lines.Add(Memo1.Lines.Strings[14]);
Memo1.Lines.Delete(I);
End
Else
Memo1.Lines.Delete(I);
End;
Until Memo1.Lines.Count-1 = -1 ;
End;
Всегда рад помочь!
Terran вне форума Ответить с цитированием
Старый 25.06.2009, 12:07   #5
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

спсибо всем
к:
Цитата:
Сообщение от Stilet Посмотреть сообщение
Чем примеры в http://www.programmersforum.ru/showthread.php?t=54590
не устроили?

P.S. учти тема кросспостная, есть все основания закрыть, так что ответ давай адекватный.
не нужно пожалуйста закрывать тему, т.к. у меня в примерах одинаковые переменные в голве сидят )), а программы абсолютно разные, т апм нужно после искать и деалть, а тут в другую мемо кидать и удалять до следующей зр
MixanMM вне форума Ответить с цитированием
Старый 30.06.2009, 07:32   #6
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Terran Посмотреть сообщение
Код:
Memo1.Lines.Delete(3);
Код:
Procedure TForm1.Button1Click(Sender: TObject);
Var
I: Integer;
Begin
Repeat
Begin
For I:=0 To Memo1.Lines.Count-1 Do
If Pos('ZR',Memo1.Lines.Strings[I])>0 Then
Begin
Memo2.Lines.Add(Memo1.Lines.Strings[2]);
Memo2.Lines.Add(Memo1.Lines.Strings[14]);
Memo1.Lines.Delete(I);
End
Else
Memo1.Lines.Delete(I);
End;
Until Memo1.Lines.Count-1 = -1 ;
End;
а зачем вот это : "For I:=0 To Memo1.Lines.Count-1 Do
...
Until Memo1.Lines.Count-1 = -1 ;"??
MixanMM вне форума Ответить с цитированием
Старый 30.06.2009, 09:24   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

когда в цикле удаляются строки количество записей (строк) изменяется. в таких случаях ВСЕГДА удобнее идти в цикле от последних записей к первым.
Это проще, удобнее, быстрее и надежнее.

сравните, вот полностью рабочий код:
Код:
procedure TForm1.ButtonDeleteLinesClick(Sender: TObject);
var i: integer;
begin
  for i:=Memo1.Lines.Count-1 downto 0 do
    if Pos('ZR',Memo1.Lines.Strings[i])>0 then 
         Memo1.Lines.Delete(i);
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.06.2009, 09:49   #8
MixanMM
Форумчанин
 
Регистрация: 09.06.2009
Сообщений: 151
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
когда в цикле удаляются строки количество записей (строк) изменяется. в таких случаях ВСЕГДА удобнее идти в цикле от последних записей к первым.
Это проще, удобнее, быстрее и надежнее.

сравните, вот полностью рабочий код:
Код:
procedure TForm1.ButtonDeleteLinesClick(Sender: TObject);
var i: integer;
begin
  for i:=Memo1.Lines.Count-1 downto 0 do
    if Pos('ZR',Memo1.Lines.Strings[i])>0 then 
         Memo1.Lines.Delete(i);
end;
код рабочий, спасибо, но у меня он работает так берет находит первую строку с символом ZR, ипосле нее нужные мне строки добавляет 4 раза, хотя должен по циклу дойти до следующей ZR и после нее добавить 2 строки, в теме ниже я написал как оно должно работать, спасибо большое все равно
MixanMM вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как удалять Модули в VBA? segail Microsoft Office Excel 1 18.06.2009 06:11
Как удалять записи по условию, через ADO Dimok82 БД в Delphi 4 13.03.2009 19:28
Как удалять ячейки с помощью VBA Рома_Чайник Microsoft Office Excel 4 16.02.2009 11:31
Как из юникодного текстового файла прочитать его построчно и неповторяющиеся слова ввести в ListBox? SkAndrew Общие вопросы Delphi 2 10.11.2008 22:14
Как удалять элементы массива в Паскале? Антонова Анна Помощь студентам 2 08.12.2007 17:01