TStringList-TStrings Tutorial/fr

From Free Pascal wiki
Revision as of 20:54, 10 July 2014 by E-ric (talk | contribs) (Created page with "{{TString_List-TString_Tutorial}} ==TStringList== La classe TStringList (ou sa mère TStrings) est un p...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Deutsch (de) English (en) español (es) suomi (fi) français (fr) polski (pl) русский (ru)

TStringList

La classe TStringList (ou sa mère TStrings) est un peu comme un fantastique tableau dynamique ou un ensemble de chaînes (un ensemble de chaîne n'est pas possible dans FPC). Il va devenir très pratique en programmant et je vais vous apprendre un usage basique de la TStringList.

Exemple simple

program StrList;
{$mode objfpc}
uses
 Classes, SysUtils;
var
  Str: TStringList;
begin
  Str := TStringList.Create; // C'est nécessaire pour utiliser cette classe (enfin toutes les classes)
  try
    Str.Add('Some String!');
    writeln('The stringlist now has ' + IntToStr(Str.Count) + ' string(s).');
    Readln;
  finally
    Str.Free; //Libère la mémoire utilisée par l'instance
  end;
end.

C'est un simple exemple de programme console qui créera uns TSTringListe et y ajoutera une chaîne. Maintenant, il y a des choses que vous devez savoir:

Create - Créera le la liste de chaîne, vide. Si vous utilisez Create, vous devrez plus tard faire Free pour libérer la mémoire qu'elle prend. Sinon, votre programme ne plantera pas mais toute la mémoire qu'il occupe ne sera restituée, ce qu'on appelle une fuite de mémoire.

Count - Cette propriété est un compteur pour le nombre de chaînes dans la liste.

Add - Cette méthode vous permet d'ajouter une chaîne dans la 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 - retournera l'index d'une chaîne dans la liste. Si elle n'y est pas trouvée, la fonction retournera -1. Clear - Videra la liste (elle ne contient plus aucune chaîne).

Exemple étendu

How about a more juicy example, eh?

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 object-oriented version of a 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;

However, TStringList offers much more functionality than a basic structure such as a dynamic array.

Keep Learning

TStringList has many other interesting features:

  1. It allows you to sort the strings
  2. It allows you to limit the list to only unique strings
  3. You can get the text of all strings as a single string using the Text property.
  4. 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