Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 18.10.2009, 17:37   #1 (permalink)
basil
Member
 
Аватар для basil
 
Регистрация: 12.02.2007
Сообщений: 165
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 69
По умолчанию Удаление строк в Memo

Всем привет. Такая проблема: необходимо удалить 4 строки подряд в Мемо после строки, которая начитается со слова "ЗОНЕ", в приведенном коде прога почему то не удаляет 2-ю строку и удаляет 5-ю строку.

for i :=0 to memo1.Lines.Count do
if pos('ЗОНЕ',memo1.Lines[i]) > 0 then
begin
memo1.lines.Delete(i+1);
memo1.lines.Delete(i+2);
memo1.lines.Delete(i+3);
memo1.lines.Delete(i+4);
end;
basil вне форума   Ответить с цитированием

Старый 18.10.2009, 17:37
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Скорее всего информация которая содержится по данным ссылкам будет вам полезна

Автоматическа нумерация строк
Обработка строк,массивов,записей

Старый 20.10.2009, 18:03   #2 (permalink)
AlexZir
support
 
Аватар для AlexZir
 
Регистрация: 19.08.2007
Адрес: Зея
Сообщений: 15,797
Записей в дневнике: 71
Сказал(а) спасибо: 166
Поблагодарили 203 раз(а) в 86 сообщениях
Репутация: 75760
По умолчанию

Потому что вы сначала вырезаете следующую строку, затем относительно вырезанного - через одну, затем относительно последней вырезанной - через две, потом - через три. По-другому, вследствие выполнения директивы Delete счетчик строк реинициализируется (перезаписывается), и принимает текущее значение, от которого и надо отталкиваться при следующем вызове данной директивы.
Правильнее будет так (обработчик нажатия кнопки)
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i: integer;
begin
for i :=0 to memo1.Lines.Count do
if pos('ЗОНЕ',memo1.Lines[i]) > 0 then
begin
memo1.lines.Delete(i+1);
memo1.lines.Delete(i+1);
memo1.lines.Delete(i+1);
memo1.lines.Delete(i+1);
end;
end;
Хотя я бы завел еще вложенный цикл от 1 до 4 и вырезал построчно. Команд поменьше писать и модифицировать программу, определяя количество удаляемых строк, будет легче.
Вложения
Тип файла: zip primer(bds06).zip (7.6 Кб, 51 просмотров)
__________________
Убить всех человеков!
AlexZir вне форума   Ответить с цитированием
Старый 23.11.2009, 17:08   #3 (permalink)
basil
Member
 
Аватар для basil
 
Регистрация: 12.02.2007
Сообщений: 165
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 69
По умолчанию

Все понял, большое спасибо, оч. помогло))))
basil вне форума   Ответить с цитированием
Старый 07.12.2009, 09:11   #4 (permalink)
basil
Member
 
Аватар для basil
 
Регистрация: 12.02.2007
Сообщений: 165
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 69
По умолчанию

Всем привет. Появилась еще одна проблема: необходимо удалить в файле все строки только содержащие сисмволы : и пробела
следующий код почемуто пропускает все:
var
s: string;
i,k: integer;
result: boolean;
t1: textfile;
begin
assignfile(t1,'c:\t1.txt');
reset(t1);
while not EOF(t1) do
begin
readln(t1,s);
begin //начинаем обработку построчно
k:=1;
result:= false;
repeat //начинаем поиск в текущей строке нужных символов
if (s[k]<>':') or (s[k]<>' ') then result := true // если в строке содержатсься другие
else k:=k+1; //симоволы то поиск удачный
until (result=true) or (k>Length(s));
if result=false
Then
delete(s,1,length(s)) //если строка содержит только ':' и ' ' тогда
else memo1.Lines.add(s) //удалем, если нет то добаляем в Мемо
end;
basil вне форума   Ответить с цитированием
Старый 07.12.2009, 09:37   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от basil Посмотреть сообщение
Всем привет. Появилась еще одна проблема: необходимо удалить в файле все строки только содержащие сисмволы : и пробела
следующий код почемуто пропускает все:
Естественно, пропускает. Потому что условие if (s[k]<>':') or (s[k]<>' ') выполняется ВСЕГДА! ЗаменИте OR на AND.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 07.12.2009, 17:36   #6 (permalink)
basil
Member
 
Аватар для basil
 
Регистрация: 12.02.2007
Сообщений: 165
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 69
По умолчанию

Да и в самом деле, что-то я затупил)) спасибо.
basil вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 02:03.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.