AGB  ·  Datenschutz  ·  Impressum  







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

Stringlist dupOnly

Ein Thema von xtZ · begonnen am 6. Sep 2007 · letzter Beitrag vom 6. Sep 2007
Antwort Antwort
Seite 1 von 2  1 2      
xtZ

Registriert seit: 22. Jul 2007
21 Beiträge
 
#1

Stringlist dupOnly

  Alt 6. Sep 2007, 15:58
Hallo,

Ich habe einige Einträge in einer sortierten Stringlist und würde nun gerne alle Einträge, die nicht doppelt vorhanden sind entfernen. Hat jemand vielleicht eine Idee, wie man das am schnellsten machen kann.

MFG
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Stringlist dupOnly

  Alt 6. Sep 2007, 16:05
die Liste sortieren und dann in einer schleife durchgehen und schauen ob der Nachfolger den gleichen Wert hat wie der Vorgänger
Delphi-Quellcode:
begin
  [...]
  lNumFound := 0;
  lLastChecked := Liste.Strings[Liste.Count - 1];
  for i := Liste.Count - 1 downto 0 do
  begin
    if Liste.Strings[i] = LastChecked then
      NumFound := NumFound + 1
    else
    begin
      if (lNumFound > 1) then
        MehrfachVorhanden.Add(LastChecked);
      lNumFound := 1;
      LastChecked := 1;
    end;
  end;
  [...]
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#3

Re: Stringlist dupOnly

  Alt 6. Sep 2007, 16:10
Hallo Jens,
ich würde die List (Idice 0 .. n) in den Grenzen 1 bis n-1 einmal durchlaufen und jedes Element, welches keinen identischen Vorgänger oder keinen identischen Nachfolger hat aus der Liste löschen. Damit sind nur noch Elemente vorhanden, die mindestens 2x in der Liste enthalten sind.
Gruß
  Mit Zitat antworten Zitat
xtZ

Registriert seit: 22. Jul 2007
21 Beiträge
 
#4

Re: Stringlist dupOnly

  Alt 6. Sep 2007, 16:17
Zitat von pstruh:
Hallo Jens,
ich würde die List (Idice 0 .. n) in den Grenzen 1 bis n-1 einmal durchlaufen und jedes Element, welches keinen identischen Vorgänger oder keinen identischen Nachfolger hat aus der Liste löschen. Damit sind nur noch Elemente vorhanden, die mindestens 2x in der Liste enthalten sind.
Gruß
Hallo,
Hast du dafür vielleicht ein Beispiel, ich bekomme immer eine Exception (Listenindex überschreitet das Maximum).
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#5

Re: Stringlist dupOnly

  Alt 6. Sep 2007, 16:20
Habe hier im Büro kein Delphi zur Verfügung, insofern nur so "aus dem Kopf heraus"...
Delphi-Quellcode:
procedure DeleteSingleItems(var List:TStringList);
var Idx : Integer;
begin
 Idx:=1;
 while Idx<List.Count-2 do
  if (List[Idx-1]<>List[Idx]) and
     (List[Idx+1]<>List[Idx]) then List.Delete(Idx)
                              else inc(Idx);
end;
  Mit Zitat antworten Zitat
xtZ

Registriert seit: 22. Jul 2007
21 Beiträge
 
#6

Re: Stringlist dupOnly

  Alt 6. Sep 2007, 16:26
Zitat von pstruh:
Habe hier im Büro kein Delphi zur Verfügung, insofern nur so "aus dem Kopf heraus"...
Delphi-Quellcode:
procedure DeleteSingleItems(var List:TStringList);
var Idx : Integer;
begin
 Idx:=1;
 while Idx<List.Count-2 do
  if (List[Idx-1]<>List[Idx]) and
     (List[Idx+1]<>List[Idx]) then List.Delete(Idx)
                              else inc(Idx);
end;
Danke, das funktioniert schon fast, außer das der erste und der letzte Eintrag der Stringlist nicht behandelt/entfernt wird!?
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#7

Re: Stringlist dupOnly

  Alt 6. Sep 2007, 16:32
Hallo xtZ, jooo, das ist so eine Sache mit der virtuellen Programmierung im Büro zwischen zwei Besprechungen. Sorry, das war dann wohl doch etwas "zu schnell geschossen". Aber vielleicht hilft es ja doch ein wenig in die richtige Richtung. Der Code von Jens (so ich das richtig sehe) die besonderheit, dass er mit 2 StringListen arbeitet. Vielleicht ist das tatsächlich einfacher (und vielleicht auch schneller). Du wirst schon noch 'ne Lösung bekommen.
Gruß aus Hamburg
  Mit Zitat antworten Zitat
xtZ

Registriert seit: 22. Jul 2007
21 Beiträge
 
#8

Re: Stringlist dupOnly

  Alt 6. Sep 2007, 16:42
Zitat von pstruh:
Hallo xtZ, jooo, das ist so eine Sache mit der virtuellen Programmierung im Büro zwischen zwei Besprechungen. Sorry, das war dann wohl doch etwas "zu schnell geschossen". Aber vielleicht hilft es ja doch ein wenig in die richtige Richtung. Der Code von Jens (so ich das richtig sehe) die besonderheit, dass er mit 2 StringListen arbeitet. Vielleicht ist das tatsächlich einfacher (und vielleicht auch schneller). Du wirst schon noch 'ne Lösung bekommen.
Gruß aus Hamburg
Ja das versteh ich. Aber dein Code hat mir ja auch schon den nötigen Denkanstoß gegeben, es zu vollenden.
Delphi-Quellcode:
procedure OnlyDupes(var slList: TStringList);
var
  i: Integer;
begin
  i := 1;
  while i < slList.Count - 2 do
    if (slList[i - 1] <> slList[i]) and (slList[i + 1] <> slList[i]) then
      slList.Delete(i)
    else
      inc(i);
  if slList[0] <> slList[1] then
    slList.Delete(0);
  if slList[slList.Count - 1] <> slList[slList.Count - 2] then
    slList.Delete(slList.Count - 1);
end;
Danke nochmal.
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.771 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Stringlist dupOnly

  Alt 6. Sep 2007, 18:47
Guten Abend,

auch wenn das Problem schon gelöst ist, möchte ich doch noch diese Methode vorstellen.

Delphi-Quellcode:
procedure OnlyDupes(var slList: TStringList);
var
  sldummy : TStringList;
begin
  slDummy := TStringList.create;
  slDummy.sorted:=true;
  slDummy.duplicates:=dupIgnore;

  slDummy.assign(slList);
  slList.assign(slDummy);
  slDummy.free;

end;
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#10

Re: Stringlist dupOnly

  Alt 6. Sep 2007, 18:55
Hallo Klaus,
also 'mal gaaaaaaaanz vorsichtig gefragt: Es sollen doch alle nur einfach vorhandenen Einträge aus der Liste verschwinden und nur die mehrfach vorhandenen Einträge übrig bleiben. Mit deiner Methode wird m. E. genau das Gegenteil bewirkt, es werden alle Mehrfacheinträge aus der Liste herausgenommen - oder denke ich da jetzt gaaaaaaanz falsch???
Gruß
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 08:40 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