Die Handhabung Die Klasse TStringList

Object Pascal im Detail - Dateien www.delphi-treff.de 125 var i: Integer; begin SetLengthSchreibsaetze, 10; for i := 0 to HighSchreibsaetze do begin Schreibsaetze[i].Zahl := i; Schreibsaetze[i].Wort := IntToStri + . Datensatz ; end; SchreibeDatei; LeseDatei; for i := 0 to HighLesesaetze do begin WriteLnLesesaetze[i].Zahl; WriteLnLesesaetze[i].Wort; WriteLn; end; ReadLn; end.

4.11.6. Die Klasse TStringList

Der Grund, warum wir Textdateien bisher eher stiefmütterlich behandelt haben, ist, dass es komfortablere Methoden der Bearbeitung dafür gibt. Hier bieten sich Stringlisten an, da das Verwalten der Strings in einer Liste dem Benutzer zusätzliche Möglichkeiten bietet.

4.11.6.1. Die Handhabung

Um eine Stringliste zu erstellen und wieder freizugeben, gehen wir den üblichen Weg: uses Classes; var stringliste: TStrings; begin stringliste := TStringList.Create; try Mache was mit stringliste finally stringliste.Free; end; end; Soll die Lebensdauer einer Stringliste an die Anwendung oder das Vorhandensein eines Formulars gekoppelt werden, so bieten sich zum Erzeugen und Freigeben die Ereignisse OnCreate und OnDestroy an. Für die Anwendung benutzt man hierbei die Ereignisse des Hauptformulars. Object Pascal im Detail - Dateien www.delphi-treff.de 126 Wir können natürlich vorhandene Textdateien in eine Stringliste laden und auch wieder speichern: stringliste.LoadFromFileFN; stringliste.SaveToFileFN; Wollen wir der Stringliste neue Strings hinzufügen, so geschieht dies mit Add, AddStrings oder Insert. Add hängt einen String an, Insert fügt an der angegebenen Position ein und AddStrings hängt der Stringliste die Strings einer anderen Stringliste an. Strings sind hier zu verstehen als Zeilen einer Stringliste. Bei Add und Insert können die einzelnen Strings als Stringkonstante oder Stringvariable übergeben werden. Beim Einfügen eines Strings durch Insert sollte man beachten, dass Listen grundsätzlich 0-indiziert sind. var s: AnsiString; ... stringliste.Add Übergabe als Konstante ; stringliste.Adds; stringliste.Insert1, s; 2. Position stringliste1.AddStringsstringliste2; Das Löschen einer Zeile geschieht durch Delete unter Angabe des Index als Parameter. Soll der komplette Inhalt der Stringliste gelöscht werden, so bieten Listen dafür die Methode Clear. stringliste.Delete3; Löscht die 4. Zeile stringliste.Clear; Der direkte Zugriff auf eine Zeile geschieht nicht durch einen Parameter, sondern über die Array-Eigenschaft Strings. Dadurch können wir den String direkt bearbeiten oder lesen. Die Anzahl der Zeilen einer Stringliste lesen wir aus der Eigenschaft Count. Zugreifen können wir auf Elemente von 0 bis Count-1. var s: AnsiString; i: Integer; ... stringliste.Strings[3] := Text ; 4. Zeile ersetzen stringliste[3] := Text ; Alternative Schreibweise stringliste[0] := stringliste[0] + Text ; Anhängen an 1. Zeile s := stringliste[stringliste.Count - 1]; Letzte Zeile wird s zugewiesen stringliste[1] := stringliste[3]; 2. und 4. Zeile sind nun identisch i := stringliste.Count; i zeigt die Anzahl der Zeilen Um die Strings innerhalb der Liste umzuordnen, verwenden wir dir Methoden Move und Exchange, jeweils durch Übergabe zweier Indizes. Move verschiebt dabei den String mit Index1 nach Index2. Der String an Index2 und alle Strings zwischen diesen Indizes ändern dadurch ihre Position. Exchange vertauscht zwei Strings, die Indizes aller anderen Strings ändern sich dadurch nicht. Object Pascal im Detail - Dateien www.delphi-treff.de 127 stringliste.Move1, 3; 2. Zeile ist nun 4. Zeile stringliste.Exchange0, stringliste.Count - 1; Vertauscht 1 und letzte Zeile Wollen wir die Stringliste auf das Vorhandensein eines Strings testen, so müssen wir nicht die Liste prüfend durchlaufen, sondern verwenden dazu IndexOf. Diese Funktion gibt -1 zurück, wenn der Prüf-String kein String der Liste ist, andernfalls den Index des 1. Vorkommens. Die gesamte Zeile und der Prüf-String müssen dabei identisch sein Berücksichtigen muss man hier den angegeben Typ der Stringliste in der Variablendeklaration. Verwendet man, wie oben angegeben, TStrings, dann ist der Vergleich nicht unter Berücksichtigung der Groß-Kleinschreibung. Ist der angegebene Typ in der Variablendeklaration jedoch TStringList, dann kann man dieses Verhalten durch die Eigenschaft CaseSensitive steuern. var stringliste: TStringList; i: Integer; ... Groß-Kleinschreibung soll berücksichtigt werden stringliste.CaseSensitive := True; i zeigt -1 oder den Index des 1. Auffindens i := stringliste.IndexOf Hallo Welt ;

4.11.6.2. Stringlisten in Verbindung zur VCL