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
| Old | New | Line | |
|---|---|---|---|
| 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).* |
