AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TStringList ignoriert doppelte Einträge nicht
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList ignoriert doppelte Einträge nicht

Offene Frage von "himitsu"
Ein Thema von devidespe · begonnen am 6. Sep 2010 · letzter Beitrag vom 6. Sep 2010
Antwort Antwort
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#1

TStringList ignoriert doppelte Einträge nicht

  Alt 6. Sep 2010, 17:34
Delphi-Version: 2007
Hi,

ich benutze Delphi 2007 Pro und versuche, eine StringList mit Einträgen zu füllen. Dabei sollen doppelt hinzugefügte Einträge ignoriert werden. Hier ein vereinfachter Auszug meines Codes:

Delphi-Quellcode:
var Liste : TStringList
    i : Byte;
begin
  Liste:=TStringList.Create;
  
  Liste.Sorted:=False;
  Liste.Duplicates:=dupIgnore;

  Liste.Add('Eintrag 1');
  Liste.Add('Eintrag 1');
  Liste.Add('Eintrag 1');

  for i:=0 to Liste.Count-1 do showmessage(Liste.Strings[i]);

  Liste.Free;
end;
Woran kann es liegen, dass die doppelten Einträge trotzdem vorhanden sind?
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

AW: TStringList ignoriert doppelte Einträge nicht

  Alt 6. Sep 2010, 17:38
Delphi-Quellcode:
Liste.Sorted:=False;
Liste.Duplicates:=dupIgnore;
Woran kann es liegen, dass die doppelten Einträge trotzdem vorhanden sind?
Auszug aus der Hilfe:
Zitat:
Note: Duplicates does nothing if the list is not sorted.
Edit: Und zukünftig daran denken, Ressourcen-Schutzblöcke zu nutzen, damit auch im Fehlerfall der Speicher freigegeben wird:
Delphi-Quellcode:
Liste := TStringList.Create;
try
  // ...
finally
  Liste.Free; // oder: FreeAndNil(Liste);
end;

Geändert von Matze ( 6. Sep 2010 um 17:41 Uhr)
  Mit Zitat antworten Zitat
devidespe

Registriert seit: 7. Sep 2006
Ort: Berlin
434 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: TStringList ignoriert doppelte Einträge nicht

  Alt 6. Sep 2010, 17:41
Okay, das hatte ich überlesen.

Gibt es keine Möglichkeit, dies ohne Listensortierung durchzuführen?
Devid
57 65 72 20 6C 65 73 65 6E 20 6B 61 6E 6E 2C 20 69 73 74 20 6B 6C 61 72 20 69 6D 20 56 6F 72 74 65 69 6C 21
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#4

AW: TStringList ignoriert doppelte Einträge nicht

  Alt 6. Sep 2010, 17:42
Nur manuell, indem du vor dem Einfügen selbst in einer Schleife prüft, ob der Eintrag bereits enthalten ist.

Also grob aus dem Kopf:
Delphi-Quellcode:
Included := false;
for i := 0 to Liste.Count - 1 do
begin
  if Liste[i] = 'Eintrag 1then
  begin
    Included := true;
    break;
  end;
end;

if not Included then
  Liste.Add('Eintrag 1');
Natürlich noch schön als Funktion/Methode verpacken und gut ist.

Geändert von Matze ( 6. Sep 2010 um 17:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.545 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: TStringList ignoriert doppelte Einträge nicht

  Alt 6. Sep 2010, 18:10
Mit IndexOf() geht das auch etwas kürzer (macht aber intern wohl genau dasselbe)
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#6

AW: TStringList ignoriert doppelte Einträge nicht

  Alt 6. Sep 2010, 18:53
Mit IndexOf() geht das auch etwas kürzer (macht aber intern wohl genau dasselbe)
.... und der Qulltext wird dafür bestimmt übersichtlicher. Ich nutze IndexOf() für solche Funktionen immer.
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  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 20:02 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