TStringList-TStrings Tutorial/de
│
Deutsch (de) │
English (en) │
español (es) │
suomi (fi) │
français (fr) │
polski (pl) │
русский (ru) │
TStringList
Die TStringList (oder ihr Vorfahr TStrings) kann man am besten mit einem verbesserten dynamischen Array vergleichen (ein Set of Strings ist nicht möglich in FPC). Die StringList ist sehr praktisch beim Programmieren. Nachfolgend will ich Ihnen die grundlegende Nutzung vermitteln.
Einfaches Beispiel
Dies ist ein einfaches Konsolenprogramm, in dem Sie eine StringList erstellen und dieser einen String zufügen.
- Erstellen Sie eine neue Anwendung (Hauptmenu Projekt -> Neues Projekt -> Anwendung) und ersetzen Sie im Quelltext den Code wie folgt:
program StrList;
{$mode objfpc}
uses
Classes, SysUtils;
var
Str: TStringList;
begin
Str := TStringList.Create; // Dies ist erforderlich, bei der Verwendung dieser Klasse (bei den meisten Klassen)
Str.Add('Ein zugefügter String!');
writeln('Die StringList hat nun ' + IntToStr(Str.Count) + ' Strings.');
Readln;
Str.Free; //Freigabe des, durch diese StringList-Instanz verwendeten, Speichers
end.
Nun einige Dinge, die Sie kennen sollten:
Create - Erschafft die StringList zur Verwendung. Wenn Sie eine StringList mit Create erstellen, müssen Sie diese auch wieder mit Free frei geben. Sonst würde Ihr Programm zwar nicht abstürzen, der verwendete Speicher jedoch auch nicht freigeben werden und könnte somit nicht anderweitig genutzt werden. Sie hätten ein Speicherleck erstellt.
Count - Diese Eigenschaft ist der Zähler für die Anzahl der Strings in der Liste.
Add - Mit dieser Methode können Sie der StringList einen String hinzufügen. Es ist eine Funktion, die den Index des Strings zurückgibt.
Delete - Löscht einen String aus der StringList. Sie müssen wissen, daß Sie nicht einfach den zu löschenden String einfügen können, Sie müssen den Index des Strings eingeben.
IndexOf - Gibt den Index eines Strings in der StringList zurück. Wenn dieser nicht gefunden wurde, wird -1 zurückgegeben.
Clear - Löscht alle Strings aus der Liste.
Erweitertes Beispiel
Wie wäre es mit etwas saftigeren Beispiel?!
program StrList2;
{$mode ObjFPC}
uses
Classes, SysUtils;
var
Str: TStringList;
S: String;
Counter: Integer;
begin
Str := TStringList.Create;
Writeln('StringList Test');
repeat
Writeln('Geben Sie einen Text zum Hinzufügen ein:');
Readln(S);
if (S = 'EXIT') then Halt; //Halt beendet sofort die Ausführung
//Wenn Sie genau hinsehen, sehen Sie, dass dies zu einem Speicherverlust führt.
if (S <> '') then
begin
Counter := Str.Add(S);
Writeln('String: ' + S + ' wurde hinzugefügt!');
Writeln('Index ist: ' + IntToStr(Counter)); //Der Zähler bekommt immer den Index des zuletzt hinzugefügten Strings.
end
else
begin
Writeln('Keine Daten eingegeben...');
end;
until (S = 'EXIT');
writeln('Inhalt: '+ Str.CommaText);
Str.Free; //den Speicher wieder freigeben
end.
Um mögliche Speicherverluste zu vermeiden sollte Sie jedoch immer wenn möglich einen Try-Finally-Block verwenden, zum Beispiel:
var
slist: TStringList;
...
slist := TStringList.Create;
try
...
//machen Sie etwas mit Ihrer StringList
...
finally
if Assigned(slist) then
FreeAndNil(slist);
end;
Dateibehandlung
Wenn Sie eine TStringList verwenden, haben Sie schon zwei Dateibehandlungsverfahren zur Verfügung: SaveToFile und LoadFromFile.
SavetoFile speichert alle Zeichenfolgen (Strings) der Liste in eine Datei.
LoadFromFile öffnet die Datei und fügt die Dateidaten in die Liste, String für String.
program StrListFile;
{$mode objfpc}
uses
Classes, SysUtils;
var
Str: TStringList;
begin
Str := TStringList.Create;
try
Str.LoadFromFile('SomeFile.txt');
Str.Add('Hallo');
Str.SaveToFile('SomeFile.txt');
finally
Str.Free;
end;
end.
Sie haben eben eine Datei geöffnet, bearbeitet und wieder abgespeichert, wo sie war!
Vergleich Array of String und TStringList
TStringList ist einfach eine erweiterte objektorientierte Version eines dynamischen String-Arrays. Einige Methoden haben Entsprechungen:
Operation | Array of String | TStringList |
---|---|---|
Deklaration von Variablen | StringList: Array of String; | StringList: TStringList; |
Initialisierung | Im Konstruktor inbegriffen | StringList := TStringList.Create |
Größe festlegen | SetLength(StringList, X); | StringList.Size := X; |
Größe erhalten | X := Length(StringList); | X := StringList.Count; |
Element hinzufügen | SetLength(StringList, Length(StringList) + 1); StringList[Length(StringList) - 1] := X; | StringList.Add(X); |
Element löschen | for I := Index to Length(StringList) - 2 do StringList[I] := StringList[I + 1]; SetLength(StringList, Length(StringList) - 1); | StringList.Delete(Index); |
Alle Elemente löschen | SetLength(StringList, 0); | StringList.Clear; |
Finalisierung | Im Destruktor inbegriffen | StringList.Free; |
Außerdem stellt eine TStringList eine viel höhere Funktionalität als eine grundlegende Struktur, wie ein dynamisches Array, zur Verfügung.
Lernen Sie weiter
TStringList hat noch viele andere interessante Fähigkeiten:
- Es ermöglicht Ihnen eine Sortieren von Zeichenfolgen.
- Sie können die Liste auf einmalige Zeichenfolgen (Strings) einschränken.
- Sie können die komplette Liste der Strings als einen einzelnen String erhalten, mithilfe der Eigschaft Text.
- Sie können ein Objekt oder andere Daten neben einem oder zu einem String speichern.
Lernen Sie die verschiedenen Prozeduren, Funktionen und Eigenschaften kennen. Siehe TStringList Dokumentation... oder die Hilfe bei Lazarus.