Verweis: | stringlisten |
Uses: | Classes |
Eingabe: | Verfahrensart(TDuplicates) |
Ausgabe: | Nichts |
Funktion: | gibt an wie bei einer Zusamenführung von Strings in einer Liste zu verfahren ist. |
Mit dem Schalter „Stringlist.Duplicates“ können Sie beim Einfügen eines oder mehrerer Strings bestimmen wie mit doppelten Einträgen verfahren werden soll. Es gibt insgesamt 3 Möglichkeiten, die in der unten stehenden Tabelle erläutert sind.
Schalter | Auswirkungen |
dupIgnore | Es werden keine doppelten Einträge zugelassen. Diese werden einfach gelöscht. |
dupAccept | Doppelte Einträge werden akzeptiert. |
dupError | Sollte versucht werden ein doppelten hinzuzufügen, dann kommt es zu einer Fehlermeldung. |
Vorbereitung: Erstellen sie eine IDE Anwendung und ziehen Sie einen TButton und TMemo auf die Form. Doppelklicken sie auf den Button und ersetzen Sie das Ereignis durch folgenden Quelltext:
Beispiel 1
procedure TForm1.Button1Click(Sender: TObject);
const
Tiere: array[0..4] of string =
('Hund', 'Katze', 'Maus', 'Esel', 'Kuh');
Nahrung: array[0..4] of string =
('Sahne', 'Joghurt', 'Milch', 'Butter', 'Kuh');
var
Liste: TStringList;
//Verknüpfe Variable mit liste
Eintraege: integer; //Wie viele Einträge
begin
Liste := TStringList.Create; // Erstelle eine Liste
Liste.Sorted := True;
liste.Duplicates := dupAccept;
Liste.AddStrings(Tiere); // Kuh bei beiden vorhanden
Liste.AddStrings(Nahrung);
Eintraege := Liste.Count;
//Im Memo übertragen
memo1.Lines := Liste;
ShowMessage('Es gibt:' + IntToStr(Eintraege) + ' Einträge.');
// Liste freigeben
Liste.Free;
end;
Normalerweise wird beim Einschalten in den Sortier Modus, welches wir in dem Beispiel 1 mit dem Befehl,
liste.Duplicates := dupAccept;
aktiviert haben, automatisch der Schalter für Duplicates auf „dupIgnore“ gestellt. Was in dem Normalfall dazu führt, dass der doppelte Eintrag des Wortes „Kuh“ kommentarlos gestrichen wird. Hier in dem Beispiel haben wir mit dem Schalter „dupAccept“ doppelte Einträge zugelassen. Jedoch halten wird die Voreinstellung für sinnvoll, denn wer eine Liste sortiert der möchte diese Liste auch durchsuchen. Dann ist es eher hinderlich, wenn wir 2 Sortierte Einträge haben dessen Quelle wir nicht mehr zuordnen können da sich beim sortieren die Position (Index) in der Liste verändert. Aber wer unbedingt will der kann, denn die Möglichkeit hierzu, besteht.
Jetzt bleibt als letztes der Schalter „dupError“ zu klären. Dieser Schalter macht das wonach er aussieht. Er erzeugt eine Exception. Wenn wir nun in Beispiel 1 folgende Zeile ändern.
liste.Duplicates := dupError;
Dan bekommen wir prima Fehlermeldungen wie diese.

Die obere Meldung kommt vom Debugger. Die Untere wird von der Exe-Datei ausgegeben. Da ein unbehandeltes Fehlerereignis, so sinnvoll wie „Aua Zahn“ ohne Besuch beim Zahnarzt ist, zeigen wir hier in Beispiel 2 die richtige Behandlung. 🙂
Vorbereitung: Erstellen sie eine IDE Anwendung und ziehen Sie einen TButton und TMemo auf die Form. Doppelklicken sie auf den Button und ersetzen Sie das Ereignis durch folgenden Quelltext:
Beispiel 2
procedure TForm1.Button1Click(Sender: TObject);
const
Tiere: array[0..4] of string =
('Hund', 'Katze', 'Maus', 'Esel', 'Kuh');
var
Liste: TStringList; //Verknüpfe Variable mit liste
begin
Liste := TStringList.Create; // Erstelle eine Liste
Liste.Sorted := True;
liste.Duplicates := dupError;
Liste.AddStrings(Tiere); // fülle die Liste
//Im Memo übertragen
memo1.Lines := Liste;
//versuche
try
// das wort Kuh hinzu zufügen
Liste.Append('Kuh');
except
ShowMessage('Warnung: Das Wort ist schon vorhanden.');
end;
// Liste freigeben
Liste.Free;
end;
Nun haben wir mit Try..Except den Fehler behandelt. Wir geben in unserem Beispiel eine Fehlermeldung im eigenen Fenster aus und Ignorieren den Eintrag. Möglich wäre auch der aufruf einer Funktion die dann bei einem vorhandenen Wert eine 1 zum Namen hinzufügt. Das wäre hier dann „Kuh1“. Hier muss natürlich auch überprüft werden ob „Kuh1“ schon vorhanden ist. Dann heißt der Name vielleicht „Kuh2“ u.s.w. Entscheidend ist hierbei, dass Sie auf Fehler reagieren können. So wie Sie es wünschen. Schauen Sie hierzu unter Try..Except nach. Das Erkennen eines doppelten Eintrags geht auch mit der Methode Stringlist.Add in Kombination von Stringlist.Count.