Difference between revisions of "TStringList-TStrings Tutorial/de"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting; deleted category included in page template)
 
(14 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
{{TString_List-TString_Tutorial}}
 
{{TString_List-TString_Tutorial}}
 +
 
==TStringList==
 
==TStringList==
  
Line 5: Line 6:
  
 
===Einfaches Beispiel===
 
===Einfaches Beispiel===
<syntaxhighlight>
+
 
 +
Dies ist ein einfaches Konsolenprogramm, in dem Sie eine StringList erstellen und dieser einen [[String/de|String]] zufügen.
 +
 
 +
* Erstellen Sie eine neue Anwendung (Hauptmenu Projekt -> Neues Projekt -> Anwendung) und ersetzen Sie im Quelltext den Code wie folgt:
 +
 
 +
<syntaxhighlight lang=pascal>
 
program StrList;
 
program StrList;
 
{$mode objfpc}
 
{$mode objfpc}
Line 14: Line 20:
 
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('Some String!');
+
   Str.Add('Ein zugefügter String!');
   writeln('The stringlist now has ' + IntToStr(Str.Count) + ' string(s).');
+
   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
Line 21: Line 27:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
in Bearbeitung --[[User:Michl|Michl]] 23:46, 28 May 2014 (CEST)
+
Nun einige Dinge, die Sie kennen sollten:
  
This is a simple console program that will create and add one string to a stringlist.
+
'''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.
Now here's some things you should know:
 
  
'''Create''' - Will create the string list for modifying. If you use '''Create''', you have to later '''Free''' it and release the memory it takes. If not, you program will not crash, but it will not release all the memory it occupied: a memory leak.
+
'''Count''' - Diese Eigenschaft ist der Zähler für die Anzahl der Strings in der Liste.
  
'''Count''' - This property is a counter for the number of strings in the List.
+
'''Add''' - Mit dieser Methode können Sie der StringList einen String hinzufügen. Es ist eine Funktion, die den '''Index''' des Strings zurückgibt.  
  
'''Add''' - This method allows you to add one string to the stringlist. It is a function that will return the '''Index''' of the String. This is where the counter comes in handy.
+
'''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.
  
'''Delete''' - Will delete a string from the stringlist. Just know that you do not simply input the string, you have to input the index of the string. Like I said: it's like a fancy Dynamic Array.
+
'''IndexOf''' - Gibt den Index eines Strings in der StringList zurück. Wenn dieser nicht gefunden wurde, wird ''-1'' zurückgegeben.
  
'''IndexOf''' - Will return the index of the string in the list. If it is not found it returns -1.
+
'''Clear''' - Löscht alle Strings aus der Liste.
  
'''Clear''' - Will clear the list.
+
===Erweitertes Beispiel===
  
===Expanded Example===
+
Wie wäre es mit etwas saftigeren Beispiel?!
  
How about a more juicy example, eh?
+
<syntaxhighlight lang=pascal>
 
 
<syntaxhighlight>
 
 
program StrList2;
 
program StrList2;
 
{$mode ObjFPC}
 
{$mode ObjFPC}
Line 54: Line 57:
 
begin
 
begin
 
   Str := TStringList.Create;
 
   Str := TStringList.Create;
   Writeln('String List Test');
+
   Writeln('StringList Test');
 
   repeat
 
   repeat
     Writeln('Enter a string to add');
+
     Writeln('Geben Sie einen Text zum Hinzufügen ein:');
 
     Readln(S);  
 
     Readln(S);  
     if (S = 'EXIT') then Halt; //Halt immediately stops execution
+
     if (S = 'EXIT') then Halt; //Halt beendet sofort die Ausführung
     //If you look closely, you will see this leads to a memory leak.
+
     //Wenn Sie genau hinsehen, sehen Sie, dass dies zu einem Speicherverlust führt.
 
     if (S <> '') then
 
     if (S <> '') then
 
     begin
 
     begin
 
       Counter := Str.Add(S);
 
       Counter := Str.Add(S);
       Writeln('String: ' + S + ' was Added!');
+
       Writeln('String: ' + S + ' wurde hinzugefügt!');
       Writeln('Index is: ' + IntToStr(Counter)); // The counter will always become the index of the last thing added
+
       Writeln('Index ist: ' + IntToStr(Counter)); //Der Zähler bekommt immer den Index des zuletzt hinzugefügten Strings.
 
     end  
 
     end  
 
     else  
 
     else  
 
     begin
 
     begin
       Writeln('No data entered...');
+
       Writeln('Keine Daten eingegeben...');
 
     end;
 
     end;
 
   until (S = 'EXIT');
 
   until (S = 'EXIT');
   writeln('Contents: '+ Str.CommaText);
+
   writeln('Inhalt: '+ Str.CommaText);
   Str.Free; //release the memory again
+
   Str.Free; //den Speicher wieder freigeben
 
end.
 
end.
 
</syntaxhighlight>
 
</syntaxhighlight>
  
However, to avoid possible memory leaks you should always use a try - finally block where possible for this, so you get something like:
+
Um mögliche Speicherverluste zu vermeiden sollte Sie jedoch immer wenn möglich einen Try-Finally-Block verwenden, zum Beispiel:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
var
 
var
 
   slist: TStringList;
 
   slist: TStringList;
Line 87: Line 90:
 
try
 
try
 
   ...
 
   ...
   // do things with your stringlist 
+
   //machen Sie etwas mit Ihrer StringList
 
   ...
 
   ...
 
finally
 
finally
Line 96: Line 99:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
==File Handling==
+
==Dateibehandlung==
  
When using the TStringList you have 2 file handling procedures: '''SaveToFile''' and '''LoadFromFile'''.
+
Wenn Sie eine TStringList verwenden, haben Sie schon zwei Dateibehandlungsverfahren zur Verfügung: '''SaveToFile''' und '''LoadFromFile'''.<br>
SavetoFile will save all strings in the list to a file.
+
SavetoFile speichert alle Zeichenfolgen (Strings) der Liste in eine Datei.<br>
LoadFromFile will open the file and add the file data to the list string by string.
+
LoadFromFile öffnet die Datei und fügt die Dateidaten in die Liste, String für String.
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
program StrListFile;
 
program StrListFile;
 
{$mode objfpc}
 
{$mode objfpc}
Line 114: Line 117:
 
   try
 
   try
 
     Str.LoadFromFile('SomeFile.txt');
 
     Str.LoadFromFile('SomeFile.txt');
     Str.Add('Hello');
+
     Str.Add('Hallo');
 
     Str.SaveToFile('SomeFile.txt');
 
     Str.SaveToFile('SomeFile.txt');
 
   finally
 
   finally
Line 122: Line 125:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
You just opened a file, edited it and saved it right back to were it was!
+
Sie haben eben eine Datei geöffnet, bearbeitet und wieder abgespeichert, wo sie war!
  
==Dynamic string array comparison==
+
==Vergleich Array of String und TStringList==
  
TStringList is simply an advanced object version of dynamic string array. Some methods have analogs:
+
TStringList ist einfach eine erweiterte objektorientierte Version eines dynamischen String-Arrays. Einige Methoden haben Entsprechungen:
  
 
{| class="wikitable"
 
{| class="wikitable"
 
|-  
 
|-  
! Operation !! array of string !! TStringList
+
! Operation !! Array of String !! TStringList
 
|-  
 
|-  
| Variable declaration || StringList: array of string; || StringList: TStringList;
+
| Deklaration von Variablen || StringList: Array of String; || StringList: TStringList;
 
|-
 
|-
| Initialization || implicit constructor || StringList := TStringList.Create
+
| Initialisierung || Im Konstruktor inbegriffen|| StringList := TStringList.Create
 
|-
 
|-
| Set size || SetLength(StringList, X); || StringList.Size := X;
+
| Größe festlegen || SetLength(StringList, X); || StringList.Size := X;
 
|-
 
|-
| Get size || X := Length(StringList); || X := StringList.Count;
+
| Größe erhalten || X := Length(StringList); || X := StringList.Count;
 
|-
 
|-
| Add item || SetLength(StringList, Length(StringList) + 1); StringList[Length(StringList) - 1] := X; || StringList.Add(X);
+
| Element hinzufügen || 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);
+
| Element löschen || 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;
+
| Alle Elemente löschen || SetLength(StringList, 0); || StringList.Clear;
 
|-
 
|-
| Finalization || implicit destructor || StringList.Free;
+
| Finalisierung || Im Destruktor inbegriffen || StringList.Free;
 
|}
 
|}
  
But TStringList offers much more functionality than a basic structure such as a dynamic array.
+
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==
  
==Keep Learning==
+
TStringList hat noch viele andere interessante Fähigkeiten:
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 [http://www.freepascal.org/docs-html/rtl/classes/tstringlist.html TStringList documentation]... or the help in Lazarus.
+
# 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.
  
... and you might like to extend this tutorial if you feel like it.
+
Lernen Sie die verschiedenen Prozeduren, Funktionen und Eigenschaften kennen. Siehe [[doc:rtl/classes/tstringlist.html|TStringList Dokumentation]]... oder die Hilfe bei Lazarus.
  
== See also ==
+
== Siehe auch ==
* [[Character and string types]]
 
  
[[Category:Tutorials/de]]
+
* [[Character and string types/de|Character and string types]]
[[Category:FPC/de]]
 
{{AutoCategory}}
 
--[[User:Michl|Michl]] 23:46, 28 May 2014 (CEST)
 

Latest revision as of 02:45, 2 March 2020

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:

  1. Es ermöglicht Ihnen eine Sortieren von Zeichenfolgen.
  2. Sie können die Liste auf einmalige Zeichenfolgen (Strings) einschränken.
  3. Sie können die komplette Liste der Strings als einen einzelnen String erhalten, mithilfe der Eigschaft Text.
  4. 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.

Siehe auch