Home » Tutorials » VCL » Listen in Delphi

Listen in Delphi

Die Methoden von TStrings

In diesem Kapitel lernen Sie, wenn Sie mit der String-Liste arbeiten. Lassen Sie sich von dem Titel nicht verwirren. Ich habe im Titel zwar Bezug auf TStrings genommen, weil dort die Methoden bereits deklariert sind und für alle abgeleiteten Klassen den gleichen Zweck erfüllen sollten, aber wie Sie seit dem letzten Kapitel wissen, dürfen Sie keine Instanz aus dieser Klasse erstellen.
In diesem Kapitel werden nicht alle Methoden dieser Klassen vorgestellt. Weitere und vollständige Informationen befinden sich in der Onlinehilfe unter dem Stichwort TStrings.

Strings der Liste hinzufügen

Für das Hinzufügen von Strings ist die Methode Add zuständig. Sie erwartet als Parameter den entsprechenden String und gibt als Rückgabewert den Index des neuen Eintrages zurück. Mit Add fügen Sie Strings prinzipiell ans Ende der Liste hinzu.
Möchten Sie einen String an eine bestimmte Position setzen, verwenden Sie die Methode Insert, die als Parameter zusätzlich die Position erwartet. Bedenken Sie dabei, dass die Zählung bei 0 beginnt. Möchten Sie also einen String an die erste Position setzen, ist der Index 0, die zweite Position trägt den Index 1 usw. Setzen Sie mithilfe von Insert einen String in die Liste, rücken alle nachkommenden Einträge um eine Position nach hinten. Der gewählte Index muss allerdings schon vorhanden sein, ansonsten kommt es zu der Fehlermeldung:

Der Index der Liste überschreitet das Maximum

Wieviele Einträge hat meine Liste?

Diese Frage stellt man sich beim Programmieren ziemlich häufig. Natürlich gibt es für dieses Problem auch eine einfache Lösung und zwar in Form der Eigenschaft Count. Sie gibt die Anzahl der Einträge zurück. Beachten Sie, dass das letzte Element einer Liste nicht der Wert von Count ist, sondern Count-1 (wir errinnern uns: die Zählung der Elemente beginnt bei 0).

Einträge aus Listen löschen

Das Gegenstück zu Insert ist die Methode Delete. Sie erwartet als Parameter den Index des zu löschenden Elements. Die nachfolgenden Elemente springen nach dem löschen um einen Index zurück. Wichtig ist dieses Verhalten, wenn man mehrere Elemente gleichzeitg löschen möchte:

for i:=0 to List.Count-1 do
    List.Delete(i);

So sieht in vielen Fällen der erste Lösungsansatz aus, um mehrere Elemente zu löschen. Da sich die Reihenfolge aber ändert, kommt es nachdem die Hälfte der Elemente gelöscht wurden zu dem oben bereits genannten Fehler, dass der Index der Liste das Maximum überschreitet. Abhilfe schafft eine Schleife, die von hinten anfängt zu zählen. So wird die Reihenfolge während des löschens auch nicht durcheinander gebracht:

for i:=List.Count-1 downto 0 do
    List.Delete(i);

Um alle Einträge zu löschen, kann man auch direkt die Methode Clear verwenden:

List.Clear;

Einträge vertauschen/bewegen

Um Einträge in einer Liste zu tauschen, verwenden Sie die Methode Exchange. Sie erwartet als Parameter die Positionen der zu tauschenden Elemente. Soll ein Eintrag nur an eine andere Position bewegt werden, sollten Sie sich die Methode Move anschauen. Im Gegensatz zu Exchange hat Move auch Auswirkungen auf die Positionen der anderen Elemente.

Zugriff auf die Elemente

Die tollsten Funktionen zum Füllen und Leeren von Listen sind ziemlich sinnlos, wenn auf die Informationen nicht zugegriffen werden kann. Sie können auf die listen, wie auf ein Array zugreifen:

procedure TForm1.Button1Click(Sender: TObject);
var
  List: TStringList;
begin
  List:=TStringList.Create;
  try
    List.Add('Guten');
    List.Add('Tag');
    Showmessage(List[0]);
  finally
    List.Free;
  end;
end;

Auch hier stellt 0 das erste Element dar, 1 das zweite usw..
Um sich den ganzen Inhalt der Liste in Form eines einzelnen Strings anzeigen zu lassen, können Sie die Methode Text verwenden:

Showmessage(List.Text);

Stringlisten speichern und laden

Die Klasse TStrings bietet ebenso Möglichkeiten an, um ihren Inhalt Speichern und Laden zu können. Um das Speichern kümmert sich Methode SaveToFile, die als Parameter den Dateinamen erwartet. Analog dazu existiert die Methode LoadFromFile um die Datei wieder zu laden:

List.SaveToFile('C:Datei.txt');

Evtl. vorhandene Dateien werden dabei überschrieben. Achten Sie darauf, dass Sie einne kompletten Dateinamen (+Pfadangabe) übergeben. Auch wenn die Datei im Anwendungsverzeichnis gespeichert werden soll, ist eine Pfadangabe nötig:

List.SaveToFile(ExtractFilePath(ParamStr(0))+'Datei.txt');