AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ListView Duplikate löschen

Ein Thema von DieHardMan · begonnen am 15. Feb 2006 · letzter Beitrag vom 16. Feb 2006
Antwort Antwort
DieHardMan

Registriert seit: 16. Jul 2002
Ort: Stuttgart
68 Beiträge
 
#1

ListView Duplikate löschen

  Alt 15. Feb 2006, 23:07
Wie kann ich in einer ListView mehrfach vorhandene Items mit gleichem Inhalt löschen? Dabei soll immer das oberste Item sowie die Originalsortierung erhalten bleiben. Habe schon zwei Versuche unternommen das hinzubekommen aber irgendwie wills nicht. Das Problem ist es dabei mehrfach vorhande Duplikate zu berücksichtigen, also:

Item0: Heute ist Montag
Item1: Heute ist Dienstag
Item2: Heute ist Dienstag
Item3: Heute ist Mittwoch
Item4: Heute ist Donnerstag
Item5: Heute ist Donnerstag
Item6: Heute ist Donnerstag
Item7: Heute ist Freitag

Es sollen also Item 2, 5 und 6 gelöscht werden.


Delphi-Quellcode:
var
  i, a: Integer;
  FirstString, SecondString: String;
  DoubleItems: TStringList;
begin
  DoubleItems := TStringList.Create;
  DoubleItems.Sorted := True;
  DoubleItems.Duplicates := dupIgnore;

  For i := 0 to lstRSSData.Items.Count - 1 do
  begin
    FirstString := AnsiLowerCase(lstRSSData.Items.Item[i].SubItems.Strings[3]);
    For a := i to lstRSSData.Items.Count - 1 do
      If a <> i then
      begin
        SecondString := AnsiLowerCase(lstRSSData.Items.Item[a].SubItems.Strings[3]);

        If FirstString = SecondString then
        begin
          DoubleItems.Add(IntToStr(a));
          DoubleItems.Add(IntToStr(i));
          ShowMessage('Duplicate text found!' + #13#10#13#10 + 'i' +
            IntToStr(i) + ': ' + #13#10 +
            lstRSSData.Items.Item[i].SubItems.Strings[2] +
            #13#10#13#10 + 'a' + IntToStr(a) + ': ' + #13#10 +
            lstRSSData.Items.Item[a].SubItems.Strings[2]);
        end;
      end; // a
  end; // i
  If DoubleItems.Count > 0 then
  begin
    DoubleItems.Sorted := False;
    DoubleItems.CustomSort(CompareInt); // Integer Sort
    DoubleItems.Delete(0); // Delete First Entry
    For i := DoubleItems.Count - 1 downto 0 do
    begin
// ShowMessage(DoubleItems.Strings[i]);
// lstRSSData.Items.Delete(StrToInt(DoubleItems.Strings[i]));
    end;
  end;
  DoubleItems.Free;
end;
Delphi-Quellcode:
var
  stl: TStringList;
  i, temp: integer;
begin
  stl := TStringList.Create;
  stl.sorted := true;
// stl.duplicates := dupError;
  stl.duplicates := dupIgnore;
  for i := lstRSSData.Items.Count - 1 downto 0 do
  begin
{    try
      stl.add(AnsiLowerCase(lstRSSData.Items.Item[i].SubItems.Strings[3]));
    except
      on E: EStringListError do
      begin
        lstRSSData.Items.Delete(i);
      end;
    end;  // try }


    temp := stl.Count;
    stl.add(AnsiLowerCase(lstRSSData.Items.Item[i].SubItems.Strings[3]));
    if stl.Count = temp then
    begin
      lstRSSData.Items.Delete(i);
    end;
  end;
  stl.Free;
Alle meine Entchen...
  Mit Zitat antworten Zitat
Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#2

Re: ListView Duplikate löschen

  Alt 16. Feb 2006, 03:55
hi, ich hoffe das hilft dir als Ansatzt

Delphi-Quellcode:
procedure DeleteDoubles(lv: TListView; SubItem: integer = -1);
var
  li1 : TListItem;
  li2 : TListItem;

  x : integer;
  y : integer;

begin

  if lv.Items.Count < 1 then Exit;

  lv.Items.BeginUpdate;

  x := 0;

  while x <= lv.Items.Count - 1 do
    begin
      li1 := lv.Items[x];

      y := x + 1;
      while y <= lv.Items.Count - 1 do
        begin
          li2 := lv.Items[y];

          if SubItem > -1 then
            begin
              if AnsiSameText(li1.SubItems[SubItem], li2.SubItems[SubItem]) then
                li2.Delete;
            end
          else
            begin
              if AnsiSameText(li1.Caption, li2.Caption) then
                li2.Delete;
            end;
          inc(y);
        end;

      inc(x);
    end;

  lv.Items.EndUpdate;
end;
  Mit Zitat antworten Zitat
DieHardMan

Registriert seit: 16. Jul 2002
Ort: Stuttgart
68 Beiträge
 
#3

Re: ListView Duplikate löschen

  Alt 16. Feb 2006, 07:24
Funzt perfekt, danke.
Alle meine Entchen...
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz