Difference between revisions of "TStringList-TStrings Tutorial/de"
Line 18: | Line 18: | ||
begin | begin | ||
Str := TStringList.Create; // Dies ist erforderlich, bei der Verwendung dieser Klasse (bei den meisten Klassen) | Str := TStringList.Create; // Dies ist erforderlich, bei der Verwendung dieser Klasse (bei den meisten Klassen) | ||
− | Str.Add(' | + | Str.Add('Ein zugefügter String!'); |
− | writeln(' | + | writeln('Die StringList hat nun ' + IntToStr(Str.Count) + ' Strings.'); |
Readln; | Readln; | ||
Str.Free; //Freigabe des, durch diese StringList-Instanz verwendeten, Speichers | Str.Free; //Freigabe des, durch diese StringList-Instanz verwendeten, Speichers |
Revision as of 22:48, 29 May 2014
│
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?!
in Bearbeitung --Michl 22:47, 29 May 2014 (CEST)
program StrList2;
{$mode ObjFPC}
uses
Classes, SysUtils;
var
Str: TStringList;
S: String;
Counter: Integer;
begin
Str := TStringList.Create;
Writeln('String List Test');
repeat
Writeln('Enter a string to add');
Readln(S);
if (S = 'EXIT') then Halt; //Halt immediately stops execution
//If you look closely, you will see this leads to a memory leak.
if (S <> '') then
begin
Counter := Str.Add(S);
Writeln('String: ' + S + ' was Added!');
Writeln('Index is: ' + IntToStr(Counter)); // The counter will always become the index of the last thing added
end
else
begin
Writeln('No data entered...');
end;
until (S = 'EXIT');
writeln('Contents: '+ Str.CommaText);
Str.Free; //release the memory again
end.
However, to avoid possible memory leaks you should always use a try - finally block where possible for this, so you get something like:
var
slist: TStringList;
...
slist := TStringList.Create;
try
...
// do things with your stringlist
...
finally
if Assigned(slist) then
FreeAndNil(slist);
end;
File Handling
When using the TStringList you have 2 file handling procedures: SaveToFile and LoadFromFile. SavetoFile will save all strings in the list to a file. LoadFromFile will open the file and add the file data to the list string by string.
program StrListFile;
{$mode objfpc}
uses
Classes, SysUtils;
var
Str: TStringList;
begin
Str := TStringList.Create;
try
Str.LoadFromFile('SomeFile.txt');
Str.Add('Hello');
Str.SaveToFile('SomeFile.txt');
finally
Str.Free;
end;
end.
You just opened a file, edited it and saved it right back to were it was!
Dynamic string array comparison
TStringList is simply an advanced object version of dynamic string array. Some methods have analogs:
Operation | array of string | TStringList |
---|---|---|
Variable declaration | StringList: array of string; | StringList: TStringList; |
Initialization | implicit constructor | StringList := TStringList.Create |
Set size | SetLength(StringList, X); | StringList.Size := X; |
Get size | X := Length(StringList); | X := StringList.Count; |
Add item | SetLength(StringList, Length(StringList) + 1); StringList[Length(StringList) - 1] := X; | StringList.Add(X); |
Delete item | for I := Index to Length(StringList) - 2 do StringList[I] := StringList[I + 1]; SetLength(StringList, Length(StringList) - 1); | StringList.Delete(Index); |
Remove all items | SetLength(StringList, 0); | StringList.Clear; |
Finalization | implicit destructor | StringList.Free; |
But TStringList offers much more functionality than a basic structure such as a dynamic array.
Keep Learning
TStringList has many other interesting features:
- It allows you to sort the strings
- It allows you to limit the list to only unique strings
- You can get the text of all strings as a single string using the Text property.
- You can store an object or other data next to the string
You can learn all the different procedures, functions and properties. See TStringList documentation... or the help in Lazarus.
... and you might like to extend this tutorial if you feel like it.
See also
--Michl 23:46, 28 May 2014 (CEST)