TStringList-TStrings Tutorial/fr: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: TStringList-TStrings Tutorial/fr
| Old | New | Line | |
|---|---|---|---|
| 1 | + | ## TStringList | |
| 2 | + | ||
| 3 | + | La classe [[doc:rtl/classes/tstringlist.html|TStringList]] (ou sa mère [[doc:rtl/classes/tstrings.html|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. | |
| 4 | + | ||
| 5 | + | ### Exemple simple | |
| 6 | + | ||
| 7 | + | ``` pascal | |
| 8 | + | program StrList; | |
| 9 | + | {$mode objfpc} | |
| 10 | + | uses | |
| 11 | + | Classes, SysUtils; | |
| 12 | + | var | |
| 13 | + | Str: TStringList; | |
| 14 | + | begin | |
| 15 | + | Str := TStringList.Create; // C'est nécessaire pour utiliser cette classe (enfin toutes les classes) | |
| 16 | + | try | |
| 17 | + | Str.Add('Some String!'); | |
| 18 | + | writeln('The stringlist now has ' + IntToStr(Str.Count) + ' string(s).'); | |
| 19 | + | Readln; | |
| 20 | + | finally | |
| 21 | + | Str.Free; //Libère la mémoire utilisée par l'instance | |
| 22 | + | end; | |
| 23 | + | end. | |
| 24 | + | ``` | |
| 25 | + | ||
| 26 | + | 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: | |
| 27 | + | ||
| 28 | + | **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 occupée. Sinon, votre programme ne plantera pas mais toute la mémoire qu'il occupe ne sera pas restituée, ce qu'on appelle une fuite de mémoire. | |
| 29 | + | ||
| 30 | + | **Count** - Cette propriété est un compteur pour le nombre de chaînes dans la liste. | |
| 31 | + | ||
| 32 | + | **Add** - Cette méthode vous permet d'ajouter une chaîne dans la StringList. C'est une fonction qui vous retournera l**'Index** de la chaîne. C'est là que le compteur est très pratique. | |
| 33 | + | ||
| 34 | + | **Delete** - Supprimera une chaîne une chaîne de la StringList. Il faut juste savoir que vous devez entrer l'index de la chaîne et non la chaine elle-même. Je l'ai déjà dit : c'est comme un fantastique tableau dynamique. | |
| 35 | + | ||
| 36 | + | **IndexOf** - retournera l'index d'une chaîne dans la liste. Si elle n'y est pas trouvée, la fonction retournera -1. | |
| 37 | + | ||
| 38 | + | **Clear** - Videra la liste (elle ne contient plus aucune chaîne). | |
| 39 | + | ||
| 40 | + | ### Exemple étendu | |
| 41 | + | ||
| 42 | + | Que diriez-vous d'un exemple plus juteux, hein? | |
| 43 | + | ||
| 44 | + | ``` pascal | |
| 45 | + | program StrList2; | |
| 46 | + | {$mode ObjFPC} | |
| 47 | + | uses | |
| 48 | + | Classes, SysUtils; | |
| 49 | + | ||
| 50 | + | var | |
| 51 | + | Str: TStringList; | |
| 52 | + | S: String; | |
| 53 | + | Counter: Integer; | |
| 54 | + | begin | |
| 55 | + | Str := TStringList.Create; | |
| 56 | + | Writeln('String List Test'); | |
| 57 | + | repeat | |
| 58 | + | Writeln('Enter a string to add'); | |
| 59 | + | Readln(S); | |
| 60 | + | if (S = 'EXIT') then Halt; //Halt arrête immédiatement l'exécution | |
| 61 | + | // Si vous observez de près, vous verrez que cela mène à une fuite de mémoire. | |
| 62 | + | if (S <> '') then | |
| 63 | + | begin | |
| 64 | + | Counter := Str.Add(S); | |
| 65 | + | Writeln('String: ' + S + ' a été ajoutée!'); | |
| 66 | + | Writeln('L''index est: ' + IntToStr(Counter)); // Le compteur sera toujours l'index de la dernière chose ajoutée | |
| 67 | + | end | |
| 68 | + | else | |
| 69 | + | begin | |
| 70 | + | Writeln('Aucune donnée saisie...'); | |
| 71 | + | end; | |
| 72 | + | until (S = 'EXIT'); | |
| 73 | + | writeln('Contenus: '+ Str.CommaText); | |
| 74 | + | Str.Free; //Libère la mémoire | |
| 75 | + | end. | |
| 76 | + | ``` | |
| 77 | + | ||
| 78 | + | Néanmoins, pour éviter une possible fuite de mémoire, vous devriez toujours utiliser un bloc try - finally là où c'est possible, pour ceci, vous devez faire quelque chose comme: | |
| 79 | + | ||
| 80 | + | ``` pascal | |
| 81 | + | var | |
| 82 | + | slist: TStringList; | |
| 83 | + | ||
| 84 | + | ... | |
| 85 | + | ||
| 86 | + | slist := TStringList.Create; | |
| 87 | + | try | |
| 88 | + | ... | |
| 89 | + | // faire des choses avec votre stringlist | |
| 90 | + | ... | |
| 91 | + | finally | |
| 92 | + | if Assigned(slist) then | |
| 93 | + | FreeAndNil(slist); | |
| 94 | + | end; | |
| 95 | + | ``` | |
| 96 | + | ||
| 97 | + | ## File Handling | |
| 98 | + | ||
| 99 | + | 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. | |
| 100 | + | ||
| 101 | + | ``` pascal | |
| 102 | + | program StrListFile; | |
| 103 | + | {$mode objfpc} | |
| 104 | + | uses | |
| 105 | + | Classes, SysUtils; | |
| 106 | + | ||
| 107 | + | var | |
| 108 | + | Str: TStringList; | |
| 109 | + | begin | |
| 110 | + | Str := TStringList.Create; | |
| 111 | + | try | |
| 112 | + | Str.LoadFromFile('SomeFile.txt'); | |
| 113 | + | Str.Add('Hello'); | |
| 114 | + | Str.SaveToFile('SomeFile.txt'); | |
| 115 | + | finally | |
| 116 | + | Str.Free; | |
| 117 | + | end; | |
| 118 | + | end. | |
| 119 | + | ``` | |
| 120 | + | ||
| 121 | + | You just opened a file, edited it and saved it right back to were it was! | |
| 122 | + | ||
| 123 | + | ## Comparaison avec les tableaux dynamiques de chaînes | |
| 124 | + | ||
| 125 | + | TStringList est simplement une version orientée-objet du tableau dynamique de chaîne. Quelques méthodes ont des analogues : | |
| 126 | + | ||
| 127 | + | | Opération | array of string | TStringList | | |
| 128 | + | |----|----|----| | |
| 129 | + | | Déclaration de variable | StringList: array of string; | StringList: TStringList; | | |
| 130 | + | | Initialisation | implicit constructor | StringList := TStringList.Create | | |
| 131 | + | | Fixer la taille | SetLength(StringList, X); | StringList.Size := X; | | |
| 132 | + | | Obtenir la taille | X := Length(StringList); | X := StringList.Count; | | |
| 133 | + | | Ajouter un article | SetLength(StringList, Length(StringList) + 1); StringList\[Length(StringList) - 1\] := X; | StringList.Add(X); | | |
| 134 | + | | Supprimer un article | for I := Index to Length(StringList) - 2 do StringList\[I\] := StringList\[I + 1\]; SetLength(StringList, Length(StringList) - 1); | StringList.Delete(Index); | | |
| 135 | + | | Supprimer tous les articles | SetLength(StringList, 0); | StringList.Clear; | | |
| 136 | + | | Finalisation | implicit destructor | StringList.Free; | | |
| 137 | + | ||
| 138 | + | Cependant, TStringList offre plus de fonctionnalité qu'une structure basique telle qu'un tableau dynamique. | |
| 139 | + | ||
| 140 | + | ## Continuez à apprendre | |
| 141 | + | ||
| 142 | + | La TStringList a d'autres caractéristiques intéressantes: | |
| 143 | + | ||
| 144 | + | 1. Elle vous permet de trier les chaînes. | |
| 145 | + | 2. Elle vous permet de limiter la liste aux seules chaîne uniques (pas de doublon). | |
| 146 | + | 3. Vous pouvez obtenir le texte de toutes les chaînes dans une seule en utilisant la propriété **Text**. | |
| 147 | + | 4. Vous pouvez stocker un objet ou une autre donnée à côté de la chaîne. | |
| 148 | + | ||
| 149 | + | Vous pouvez apprendre toutes les différentes procédures, fonctions et propriété. Voir [[doc:rtl/classes/tstringlist.html|Documentation TStringList]]... ou dans l'aide de Lazarus. | |
| 150 | + | ||
| 151 | + | ... et vous pouvez étendre ce tutoriel si cela vous enchante. | |
| 152 | + | ||
| 153 | + | ## Voir aussi | |
| 154 | + | ||
| 155 | + | - [[Character and string types/fr|Types caractère et chaîne]] | |
| 156 | + | ||
| 157 | + | --- | |
| 158 | + | *From the Free Pascal wiki, page "TStringList-TStrings Tutorial/fr", as it stood on 2020-03-02 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).* | |
| 159 | + | Category: FPC/fr | |
| 160 | + | Category: Tutorials/fr |
