Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ListBox, удаление и сортировка 
V
    Опции темы
JoE
Дата 16.6.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.6.2009

Репутация: нет
Всего: нет



Я тут новичек в программирование, сильно не бейте). Задача такая: Имеется Listbox с данными такого типа

Вася123
Федя123
Вася345
Петя123
Петя567
Вася589

Надо сделать 1.Найти человека, вписанного в Edit1, например "Вася", а остальное все удалить, затем отсортировать, что бы получилось что то вроде:

Вася123
Вася345
Вася589

и затем по нажатию кнопки в Edit2 рандомно вписывался один из "Васяххх".

Как реализовать? желательно с примерами, что бы понятно было...

Это сообщение отредактировал(а) JoE - 16.6.2009, 23:30
PM MAIL   Вверх
Данкинг
Дата 16.6.2009, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(JoE @  17.6.2009,  00:15 Найти цитируемый пост)
Найти всех "Вася", остальное все удалить

Суть такая, но пример работать не будет, так как при удалении строки общее их число, разумеется, уменьшится. Можно копировать те строчки, где есть "вася", в новый StringList, затем очистить ListBox и заново в него скопировать из StringList'а. В общем, домашнее задание тебе такое. smile 
Код

var j:integer;
begin
for j:=0 to ListBox1.Items.Count -1 do
 begin
  if pos('ВАСЯ',ansiuppercase(ListBox1.Items.Strings[j]))=0 then
   ListBox1.Items.Delete(j);
 end;
end;


Цитата(JoE @  17.6.2009,  00:15 Найти цитируемый пост)
, затем отсортировать

Код

ListBox1.Sorted:=true;


Цитата(JoE @  17.6.2009,  00:15 Найти цитируемый пост)
и затем по нажатию кнопки в Edit1 рандомно вписывался один из "Васей".

Код

var r:integer;
begin
 randomize;
 r:=random(ListBox1.Items.Count);
 edit1.Text:=ListBox1.Items.Strings[r-1];
end;


Это сообщение отредактировал(а) Данкинг - 16.6.2009, 23:38


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Coder
Дата 17.6.2009, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 2
Всего: 11



Цитата(Данкинг @  17.6.2009,  07:34 Найти цитируемый пост)
Суть такая, но пример работать не будет, так как при удалении строки общее их число, разумеется, уменьшится. Можно копировать те строчки, где есть "вася", в новый StringList, затем очистить ListBox и заново в него скопировать из StringList'а. В общем, домашнее задание тебе такое.


С таким циклом все будет правильно удаляться, только сама pos() с русскими буквами не работает.
Код

for j:=ListBox1.Items.Count -1 downto 0 do 
 ....


PM MAIL   Вверх
Данкинг
Дата 17.6.2009, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(Coder @  17.6.2009,  07:56 Найти цитируемый пост)
С таким циклом все будет правильно удаляться

Да, правильно. smile 

Цитата(Coder @  17.6.2009,  07:56 Найти цитируемый пост)
только сама pos() с русскими буквами не работает.

Почему это? smile Сейчас сделал тупо поиск POS'а по своим программам (*.pas), вот нашёл первое попавшееся:
Код

if (pos('ЦБ-',ansiuppercase(st))=0) 

- этот код определённо работает, т.к. эта программа часто у нас используется. Да и вообще, никогда не замечал глюков такого рода, как ты пишешь. smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Keeper89
Дата 17.6.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 9
Всего: 58



Я бы сделал, как уже сказал Данкинг, с отдельным TStringList'ом. Тогда исходные данные "теряться" не будут (кстати не сказано, каким образом они там оказались).


--------------------
PM MAIL WWW   Вверх
Coder
Дата 18.6.2009, 03:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 733
Регистрация: 13.12.2004

Репутация: 2
Всего: 11



Цитата(Данкинг @  17.6.2009,  19:27 Найти цитируемый пост)
Почему это?  Сейчас сделал тупо поиск POS'а по своим программам (*.pas), вот нашёл первое попавшееся:


У меня в Delphi 7 точно не работает  smile 
PM MAIL   Вверх
Данкинг
Дата 18.6.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: 11
Всего: 130



Цитата(Coder @  18.6.2009,  04:31 Найти цитируемый пост)
У меня в Delphi 7 точно не работает

Ну не знаю, у меня именно в Delphi 7 работает, только вчера программу с этим писал (и сегодня продолжу). smile 


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
kami
Дата 18.6.2009, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

Репутация: 22
Всего: 72



Цитата(Данкинг @  16.6.2009,  23:34 Найти цитируемый пост)
Суть такая, но пример работать не будет, так как при удалении строки общее их число, разумеется, уменьшится. 

В этом случае не нужно заводить дополнительные списки.
Вариант-1:
Код

for j:=ListBox1.Items.Count -1 downto 0 do
 begin
  if pos('ВАСЯ',ansiuppercase(ListBox1.Items.Strings[j]))=0 then
   ListBox1.Items.Delete(j);
 end;

Вариант-2:
Код

j:=0;
While j<ListBox1.Items.Count do
  if pos('ВАСЯ',ansiuppercase(ListBox1.Items.Strings[j]))=0 then
    ListBox1.Items.Delete(j)
  else
    inc(j);

PM MAIL WWW   Вверх
JoE
Дата 19.6.2009, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 16.6.2009

Репутация: нет
Всего: нет



Всем спасибо, разобрался)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1090 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.