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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2010, 08:53   #1
Pavarotti
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 48
По умолчанию Поиск фрагмента по Lixtbox'у.

Уважаемые знатоки, помогите, пожалуйста, со следующей проблемкой:
В Listbox'e построчно выводится инфа следующего типа:
3+36+4.5+4+3.5+3 = 54
3+17.05+13.05+12+6+3.5=54.6
3+36+12+4 = 55
36+5+4.5+4+3.5 = 53
3+13.05+17.05+12+5+4=54.1
32+12+6 = 54

Необходимо сделать так, чтобы программа удаляла строчки, включающие фрагменты текста "17.05+13.05" и "13.05+17.05".
В данном конкретном случае после этой операции в Listbox'e должно остаться:
3+36+4.5+4+3.5+3 = 54
3+36+12+4 = 55
36+5+4.5+4+3.5 = 53
32+12+6 = 54

Потенциально, количество строчек, включающих искомый текст может любым.

Вот такая вот в принципе задачка.

Заранее благодарен за ответы.
Pavarotti вне форума Ответить с цитированием
Старый 09.08.2010, 08:57   #2
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Пишу алгоритм, примерный. Создаешь цикл перебора строк Listbox'a. В цикле ищешь в строке нужный текст. Если есть совпадение, то удаляешь текущий номер строки. Выходишь из цикла и начинаешь его сначала. Т.к. кол-во строк уже будет другим.
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 09.08.2010, 09:00   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

С потолка, поясняя предидущий пост.
Код:
with ListBox do
 for i:=0 to Items.Count-1 do
  if pos('17.05+13.05',items[i])<>0 then delete(i);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.08.2010, 09:01   #4
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
С потолка, поясняя предидущий пост.
Код:
with ListBox do
 for i:=0 to Items.Count-1 do
  if pos('17.05+13.05',items[i])<>0 then delete(i);
Ну вот... я специально код не писал, чтобы человек сам учился...
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 09.08.2010, 09:37   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
DIgorevich
Не волнуйся, научится, этот код не совершенен, я койчего в нем не учел.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.08.2010, 10:01   #6
Pavarotti
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 48
По умолчанию

Спасибо большое, но что-то не выходит....
Прописал:
Код:
procedure TForm13.Button9Click(Sender: TObject);
var i:word;
begin
if ListBox1.Items.Count > 1 then
begin
    with ListBox1 do
    begin
    if pos('17.05+13.05',ListBox1.items[i])<>0 then
    ListBox1.Items.Delete(i)

end;
Не фига не удаляет... Есть идеи почему?

Последний раз редактировалось Stilet; 09.08.2010 в 10:19.
Pavarotti вне форума Ответить с цитированием
Старый 09.08.2010, 10:05   #7
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

А где у тебя i инициализируется?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 09.08.2010, 10:21   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Есть идеи почему?
Есть. Например внимательно почитать мой пример. (смотреть на слово for)
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 09.08.2010, 10:33   #9
Pavarotti
Пользователь
 
Регистрация: 02.12.2009
Сообщений: 48
По умолчанию

Оё-ёй!!! Ступил я, товарищи, каюсь!
Вот процедурка согласно вашему примеру.
Код:
procedure TForm13.Button9Click(Sender: TObject);
var i:integer;
begin
with ListBox1 do
 for i:=0 to Items.Count-1 do
  if pos('17.05+13.05',items[i])<>0 then
  listbox1.Items.delete(i);

end;
То что надо делает, но, к сожалению, только один раз.
Т.е. при нажатии кнопки прога удаляет первую наденную строчку с искомым фрагментом и выдает ошибку List index out of bounds (и цифорки разные), и дальше уже не ищет и не удалает.

Последний раз редактировалось Stilet; 09.08.2010 в 11:14.
Pavarotti вне форума Ответить с цитированием
Старый 09.08.2010, 10:35   #10
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

А ты мой пост читал? я же писал, что после 1-го удаления, кол-во строк уже будет другим
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление фрагмента текста Шурик Общие вопросы Delphi 0 31.05.2009 16:11
Поиск и выделение фрагмента в вордовском документе Bobby Общие вопросы Delphi 1 17.04.2009 17:07
Печать фрагмента TImage KiLLiR Мультимедиа в Delphi 3 12.04.2009 14:34
Чтение фрагмента файла в динамический массив. ZeroCool. Общие вопросы Delphi 2 02.11.2007 08:14