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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2012, 23:02   #1
sdfy
 
Регистрация: 19.10.2012
Сообщений: 3
Вопрос Memo удаление строки...

Вообщем столкнулся с проблемой.
Загружаю в мемо предположим 100 строк и программа должна удалить те строки в которых меньше 16 символов. Как это осущиствить?
sdfy вне форума Ответить с цитированием
Старый 20.10.2012, 23:25   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
var i:integer;
begin
 i:=0;
 while i<Memo1.Lines.Count do
  if Length(Memo1.Lines[i])<16
   then Memo1.Lines.Delete(i)
   else inc(i);
end;
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 20.10.2012 в 23:40.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.10.2012, 23:28   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
var i: integer;
    s: string;
begin
  i:=0;
  While i<Memo1.Lines.Count do begin
    s:=Memo1.Lines.ValueFromIndex[i];
    if length(s)<16 then Memo1.Lines.Delete(i)
    else inc(i);
  end;
end;
так?

UPD. Опоздал, да еще и пару ошибок сделал сначала
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 20.10.2012 в 23:32.
Sciv вне форума Ответить с цитированием
Старый 20.10.2012, 23:31   #4
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,434
По умолчанию

Примерно так:
Код:
label g;
var
  i:Integer;
  bDoNext:BOOL:
begin
 g:
    bDoNext:=False;
for i:=0 to Memo1.Lines.Count -1 do
begin
  if Length(Memo1.Lines[i]) < 17 then
  begin
    Memo.Lines.Delete(i);
    bDoNext:=True;
    Break;
  end;
end;

if bDoNext then goto g;
end;
Человек_Борща вне форума Ответить с цитированием
Старый 20.10.2012, 23:32   #5
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
так?
Не-а. Правильно у Пепел Феникса, только он забыл сравнить с 16.Можно и циклом FOR
Код:
 for i:=Memo1.Lines.Count-1 downto 0 do
   if Length(Memo1.Lines[i])<16 then Memo1.Lines.Delete(i);
Человек_Борща, не вникал насчет правильности, но накрутили дай боже
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 20.10.2012 в 23:34.
Аватар вне форума Ответить с цитированием
Старый 20.10.2012, 23:34   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Код:
Не-а. Правильно у Пепел Феникса...
Ага, уже увидел и поправил. Спасибо
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 20.10.2012, 23:40   #7
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

ну забыл, бывает

сча исправлю.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 21.10.2012, 00:00   #8
sdfy
 
Регистрация: 19.10.2012
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
Код:
var i:integer;
begin
 i:=0;
 while i<Memo1.Lines.Count do
  if Length(Memo1.Lines[i])<16
   then Memo1.Lines.Delete(i)
   else inc(i);
end;
спасибо работает, но в мемо остаются пустые строки вместо этих удаленных, как удалить и сразуже убрать пустую строку
sdfy вне форума Ответить с цитированием
Старый 21.10.2012, 00:09   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
но в мемо остаются пустые строки вместо этих удаленных
По-моему, это глюк мемо. Строки удаляются подчистую, сдвигая соседние между собой.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 21.10.2012, 00:58   #10
sdfy
 
Регистрация: 19.10.2012
Сообщений: 3
По умолчанию

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

12346:123456
5465465:4545
.....
я их разделил и в переменной "t" у меня пишется все что перед ":", а в переменной "s" все что после ":". Как сделать примерно туже функцию. Удалять все строчки в которых переменная "s" меньше 6 символов.))))
sdfy вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление строк в memo roxy7 Компоненты Delphi 2 16.03.2012 23:07
Удаление строки в memo dubailand Общие вопросы Delphi 6 21.12.2011 16:04
Удаление строк в Memo Marsel737 Общие вопросы Delphi 8 03.01.2010 10:42
Удаление строк из Memo Leksda Общие вопросы Delphi 6 20.03.2009 15:31
Удаление конкретной строки Memo JakSon Общие вопросы Delphi 6 03.03.2008 09:35