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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2016, 16:58   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,897
Вопрос Сравнить два списка и вывести отсутствующие

Доброго времени суток!
Ушёл в цикл, не могу решить проблему.
Есть два ListView
Код:
  for I := 0 to 2 do
  begin
    Item := Listview1.Items.Add;
    Item.Caption := IntToStr(I);
  end;

  for I := 0 to 2 do
  begin
    Item := Listview2.Items.Add;
    Item.Caption := IntToStr(I);
  end;
В первом ListView
0
1
2
Во втором ListView
0
1
2

Я удаляю из второго ListView 2, в итоге должно вывестись ShowMessage с 2
Код:
var
  SL: TStringList;
  I, I2: Integer;
begin
  SL := TStringList.Create;

  for I := 0 to ListView1.Items.Count - 1 do
  begin
    for I2 := 0 to ListView2.Items.Count - 1 do
    begin
      if not (ListView1.Items[I].Caption = ListView2.Items[I2].Caption) then SL.Add(ListView1.Items[I].Caption);
    end;
  end;

  ShowMessage(SL.Text);
  FreeAndNil(SL);
end;
Вижу, что ерунда, но исправить не могу.
Shouldercannon вне форума Ответить с цитированием
Старый 01.01.2016, 18:21   #2
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 369
По умолчанию

Набросал
Код:
procedure TForm1.Button2Click(Sender: TObject);
var i,j: integer;
    Buff: string;    //буфер для ShowMessage
    Match: boolean;  //флажок "равно/не равно"
begin
  Buff:='';

  //перебираем элементы первого ListView
  for i:=0 to ListView1.Items.Count-1 do
    begin
    //устанавливаем false перед перебором элементов второго ListView
    Match:=false;  
    
    for j:=0 to ListView2.Items.Count-1 do
      //если элементы равны
      if (ListView1.Items[i].Caption = ListView2.Items[j].Caption) then
        begin
        Match:=true;
        Break;
        end;

    //если для i-го элемента первого ListView нет совпадений,
    //добавляем инфу в буфер   
    if not Match then
      Buff:=Buff+'Нету '+ListView1.Items[i].Caption+#10;    
    end;

  //показываем, че вышло    
  ShowMessage(Buff);
end;
Изображения
Тип файла: jpg 1.jpg (36.6 Кб, 102 просмотров)
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 01.01.2016, 20:40   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Вижу, что ерунда, но исправить не могу.
я тоже вижу.
а чо сделать-то надо было?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнить два списка Datetime alex89d Общие вопросы Delphi 6 11.05.2015 17:04
Сравнить два списка DozEL Microsoft Office Excel 3 27.04.2015 13:14
Сравнить два массива и вывести в отдельный столбец кол-во вхождений VictorM Microsoft Office Excel 36 13.04.2015 22:14
Сравнить два ассоциативных массива и вывести одинаковые значения. livesport PHP 1 20.10.2012 15:10
Сравнить два файла Aleksandr Microsoft Office Excel 6 07.10.2008 00:22