Sign in Join
Wiki copytemporary

TStringList-TStrings Tutorial/de: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: TStringList-TStrings Tutorial/de

OldNewLine
1+## TStringList
2+
3+Die [[doc:rtl/classes/tstringlist.html|TStringList]] (oder ihr Vorfahr [[doc:rtl/classes/tstrings.html|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.
4+
5+### Einfaches Beispiel
6+
7+Dies ist ein einfaches Konsolenprogramm, in dem Sie eine StringList erstellen und dieser einen [[String/de|String]] zufügen.
8+
9+- Erstellen Sie eine neue Anwendung (Hauptmenu Projekt -\> Neues Projekt -\> Anwendung) und ersetzen Sie im Quelltext den Code wie folgt:
10+
11+``` pascal
12+program StrList;
13+{$mode objfpc}
14+uses
15+ Classes, SysUtils;
16+var
17+ Str: TStringList;
18+begin
19+ Str := TStringList.Create; // Dies ist erforderlich, bei der Verwendung dieser Klasse (bei den meisten Klassen)
20+ Str.Add('Ein zugefügter String!');
21+ writeln('Die StringList hat nun ' + IntToStr(Str.Count) + ' Strings.');
22+ Readln;
23+ Str.Free; //Freigabe des, durch diese StringList-Instanz verwendeten, Speichers
24+end.
25+```
26+
27+Nun einige Dinge, die Sie kennen sollten:
28+
29+**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.
30+
31+**Count** - Diese Eigenschaft ist der Zähler für die Anzahl der Strings in der Liste.
32+
33+**Add** - Mit dieser Methode können Sie der StringList einen String hinzufügen. Es ist eine Funktion, die den **Index** des Strings zurückgibt.
34+
35+**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.
36+
37+**IndexOf** - Gibt den Index eines Strings in der StringList zurück. Wenn dieser nicht gefunden wurde, wird *-1* zurückgegeben.
38+
39+**Clear** - Löscht alle Strings aus der Liste.
40+
41+### Erweitertes Beispiel
42+
43+Wie wäre es mit etwas saftigeren Beispiel?!
44+
45+``` pascal
46+program StrList2;
47+{$mode ObjFPC}
48+uses
49+Classes, SysUtils;
50+
51+var
52+ Str: TStringList;
53+ S: String;
54+ Counter: Integer;
55+begin
56+ Str := TStringList.Create;
57+ Writeln('StringList Test');
58+ repeat
59+ Writeln('Geben Sie einen Text zum Hinzufügen ein:');
60+ Readln(S);
61+ if (S = 'EXIT') then Halt; //Halt beendet sofort die Ausführung
62+ //Wenn Sie genau hinsehen, sehen Sie, dass dies zu einem Speicherverlust führt.
63+ if (S <> '') then
64+ begin
65+ Counter := Str.Add(S);
66+ Writeln('String: ' + S + ' wurde hinzugefügt!');
67+ Writeln('Index ist: ' + IntToStr(Counter)); //Der Zähler bekommt immer den Index des zuletzt hinzugefügten Strings.
68+ end
69+ else
70+ begin
71+ Writeln('Keine Daten eingegeben...');
72+ end;
73+ until (S = 'EXIT');
74+ writeln('Inhalt: '+ Str.CommaText);
75+ Str.Free; //den Speicher wieder freigeben
76+end.
77+```
78+
79+Um mögliche Speicherverluste zu vermeiden sollte Sie jedoch immer wenn möglich einen Try-Finally-Block verwenden, zum Beispiel:
80+
81+``` pascal
82+var
83+ slist: TStringList;
84+
85+...
86+
87+slist := TStringList.Create;
88+try
89+ ...
90+ //machen Sie etwas mit Ihrer StringList
91+ ...
92+finally
93+ if Assigned(slist) then
94+ FreeAndNil(slist);
95+end;
96+```
97+
98+## Dateibehandlung
99+
100+Wenn Sie eine TStringList verwenden, haben Sie schon zwei Dateibehandlungsverfahren zur Verfügung: **SaveToFile** und **LoadFromFile**.\
101+SavetoFile speichert alle Zeichenfolgen (Strings) der Liste in eine Datei.\
102+LoadFromFile öffnet die Datei und fügt die Dateidaten in die Liste, String für String.
103+
104+``` pascal
105+program StrListFile;
106+{$mode objfpc}
107+uses
108+ Classes, SysUtils;
109+
110+var
111+ Str: TStringList;
112+begin
113+ Str := TStringList.Create;
114+ try
115+ Str.LoadFromFile('SomeFile.txt');
116+ Str.Add('Hallo');
117+ Str.SaveToFile('SomeFile.txt');
118+ finally
119+ Str.Free;
120+ end;
121+end.
122+```
123+
124+Sie haben eben eine Datei geöffnet, bearbeitet und wieder abgespeichert, wo sie war!
125+
126+## Vergleich Array of String und TStringList
127+
128+TStringList ist einfach eine erweiterte objektorientierte Version eines dynamischen String-Arrays. Einige Methoden haben Entsprechungen:
129+
130+| Operation | Array of String | TStringList |
131+|----|----|----|
132+| Deklaration von Variablen | StringList: Array of String; | StringList: TStringList; |
133+| Initialisierung | Im Konstruktor inbegriffen | StringList := TStringList.Create |
134+| Größe festlegen | SetLength(StringList, X); | StringList.Size := X; |
135+| Größe erhalten | X := Length(StringList); | X := StringList.Count; |
136+| Element hinzufügen | SetLength(StringList, Length(StringList) + 1); StringList\[Length(StringList) - 1\] := X; | StringList.Add(X); |
137+| Element löschen | for I := Index to Length(StringList) - 2 do StringList\[I\] := StringList\[I + 1\]; SetLength(StringList, Length(StringList) - 1); | StringList.Delete(Index); |
138+| Alle Elemente löschen | SetLength(StringList, 0); | StringList.Clear; |
139+| Finalisierung | Im Destruktor inbegriffen | StringList.Free; |
140+
141+Außerdem stellt eine TStringList eine viel höhere Funktionalität als eine grundlegende Struktur, wie ein dynamisches Array, zur Verfügung.
142+
143+## Lernen Sie weiter
144+
145+TStringList hat noch viele andere interessante Fähigkeiten:
146+
147+1. Es ermöglicht Ihnen eine Sortieren von Zeichenfolgen.
148+2. Sie können die Liste auf einmalige Zeichenfolgen (Strings) einschränken.
149+3. Sie können die komplette Liste der Strings als einen einzelnen String erhalten, mithilfe der Eigschaft **Text**.
150+4. Sie können ein Objekt oder andere Daten neben einem oder zu einem String speichern.
151+
152+Lernen Sie die verschiedenen Prozeduren, Funktionen und Eigenschaften kennen. Siehe [[doc:rtl/classes/tstringlist.html|TStringList Dokumentation]]... oder die Hilfe bei Lazarus.
153+
154+## Siehe auch
155+
156+- [[Character and string types/de|Character and string types]]
157+
158+---
159+*From the Free Pascal wiki, page "TStringList-TStrings Tutorial/de", as it stood on 2020-03-02 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history