TStringList-TStrings Tutorial
│
Deutsch (de) │
English (en) │
español (es) │
suomi (fi) │
français (fr) │
polski (pl) │
русский (ru) │
TStringList
The TStringList (or its parent, TStrings) is much like a fancy dynamic array or Set of Strings (a set of strings is not possible in FPC). It will come in handy a lot when programming and I'm going to teach you basic TStringList usage!
Simple example
<Delphi> program StrList; {$mode objfpc} uses
Classes, SysUtils;
var
Str: TStringList;
begin
Str := TStringList.Create; // This is needed when using this class(or most classes) Str.Add('Some String!'); writeln('The stringlist now has ' + IntToStr(Str.Count) + ' string(s).'); Readln; Str.Free; //Release the memory taken by the class.
end. </Delphi>
This is a simple console program that will create and add one string to a stringlist. 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 - This property is a counter for the number of strings in the List.
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 - 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 - Will return the index of the string in the list. If it is not found it returns -1.
Clear - Will clear the list.
Expanded Example
How about a more juicy example, eh?
<Delphi> 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'); Str.Free; //release the memory again
end. </Delphi>
More things you can do
TStringList has many other interesting features:
- It allows you to sort the strings, and only allow 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 save and load a stringlist to file using SaveToFile and LoadFromFile
For more details on these and more features, please have a look at the help - and extend this tutorial if you feel like it.
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.
<Delphi> program StrListFile; {$mode objfpc} uses
Classes, SysUtils;
var
Str: TStringList;
begin
Str := TStringList.Create; Str.LoadFromFile('SomeFile.txt'); Str.Add('Hello'); Str.SaveToFile('SomeFile.txt');
end. </Delphi>
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.Size; |
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
You can learn all the different procedures, functions and properties. See TStringList documentation
If you feel I might have left something out, Modify At Will!
Hope I helped!