Sign in Join
Wiki copytemporary

Command line parameters and environment variables/fr: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Présentation
22
33Quand un programme est démarré, un utlisateur peut transmettre des paramètres de ligne de commandes et définir des variables d'environnement. P. ex., le compilateur FreePascal obtient la plupart de ces paramètres via les options de ligne de commande:
44
5-` fpc -Fudirectory -gh unit1.pas`
5+```text
6+ fpc -Fudirectory -gh unit1.pas
7+```
68
79## Paramètres de la ligne de commande
810
911### Les bases
1012
1113Un programme Pascal peut accéder aux paramètres via les fonctions *ParamStr* et *ParamCount*. *ParamStr(0)* est le nom de programme lui-même (et le chemin d'accès _SI_ le système d'exploitation le permet). *ParamStr(1)* est le premier paramètre. *ParamCount* est le nombre de paramètres.
1214
1315``` pascal
1416program Project1;
1517
1618{$mode objfpc}{$H+}
1719
1820var
1921 I: Integer;
2022begin
2123 WriteLn('Programme: ', ParamStr(0));
2224 for I := 1 to ParamCount do
2325 WriteLn('Param ', I, ': ', ParamStr(I));
2426end.
2527```
2628
2729P. ex.:
2830
29-` $ /tmp/project1 -a`\
30-` Program: /tmp/project1`\
31-` Param 1: -a`
31+``` pascal
32+ $ /tmp/project1 -a
33+ Program: /tmp/project1
34+ Param 1: -a
35+```
3236
3337### Orienté utilisateur
3438
3539Un bon programme devrait donner un message d'aide quand il est invoqué avec de mauvais paramètres et devrait suivre une manière commune dpour transmettre les paramètres. L'unité CustApp, qui vient avec FPC, fournit la classe TCustomApplication, laquelle fournit des fonctions pour contrôler et lire facilement des paramètres. Bien sûr, vous pouvez toujours accéder directement aux paramètres via ParamStr et ParamCount.
3640
3741Toute application LCL utilise ceci automatiquement. L'objet Application est une TCustomApplication.
3842
3943Si vous voulez écrire un programme non LCL, puis créer un nouveau projet dans Lazarus du type 'Application Console'. Ceci créera un project1.lpr avec quelques goodies sympas dont presque tous les programmes ont besoin. Allez à la méthode DoRun pour spécifier ce que fait votre programme.
4044
4145#### Contrôler un paramètre
4246
4347Avec TCustomApplication, vous pouvez accéder aux paramètres par leur nom. P. ex., votre programme pourrait afficher un texte d'aide quand l'utilisateur donne le paramètre d'aide courant *-h*. *-h' est une option courte. La forme longue est le*--help*. Pour tester si l'utilisateur a appelé le programme avec*-h*ou*--help'', vous pouvez utiliser;
4448
4549``` pascal
4650if HasOption('h', 'help') then begin
4751 WriteHelp;
4852 Halt;
4953end;
5054```
5155
5256Note: Cela est valable dans la méthode DoRun. Dans une fiche LCL, vous devez qualifier HasOption avec *Application.*. P. ex.:
5357
5458``` pascal
5559if Application.HasOption('h', 'help') then begin
5660 WriteHelp;
5761 Halt;
5862end;
5963```
6064
6165``` pascal
6266// Si vous voulez seulement proposer l'option courte, utilisez:
6367if HasOption('h', '') then ...
6468
6569// Si vous voulez seulement proposer l'option longue, utilisez:
6670if HasOption('help') then ...
6771```
6872
6973Contrairement à ce que laisse penser l'exemple de présentation, il n'est pas possible de cumuler plusieurs options courtes derrière un seul '-', ainsi -dh n'est pas reconnue comme une écriture condensée de -d -h.
7074
7175#### Lire la valeur d'un paramètre
7276
7377Chaque paramètre peut donner une valeur. Par exemple:
7478
75-` project1 -f filename`
79+```text
80+ project1 -f filename
81+```
7682
7783ou avec la forme longue
7884
79-` project1 --file=filename`
85+```text
86+ project1 --file=filename
87+```
8088
8189``` pascal
8290WriteLn('f=', GetOptionValue('f', 'file'));
8391```
8492
8593Note: si vous obtenez le message d'erreur *Option at position 1 needs an argument : f.* alors vous avez oubliez d'ajouter l'option dans l'appel *CheckOptions*.
8694
8795#### Contrôler la validité de paramètres
8896
8997Les paramètre de ligne de commande sont du texte libre, aussi l'utilisateur peut facilement taper des erreurs. Contrôler la syntaxe des paramètres est en conséquence obligatoire. Vous pouvez utiliser la méthode [[doc:fcl/custapp/tcustomapplication.checkoptions.html|CheckOptions]] pour cela:
9098
9199Vous pouvez définir quels paramètres sont permis, lesquels ont besoin d'un paramètre et en cas d'erreur de syntaxe, vous pouvez obtenir un message plus les mauvaises options pour afficher des erreurs utiles et détaillées.
92100
93101Exemples:
94102
95103``` pascal
96104ErrorMsg := CheckOptions('hf:', 'help file:');
97105```
98106
99107Cela permet de transmettre des options courtes *-f value* et *-h*. Il permet de transmettre les options longues *--help* ou *--file=filename*. Il ne permet pas de passer *--help* avec une valeur, ni *--file* sans valeur.
100108
101109## Variables d'environnement
102110
103111Trois fonctions de bases sont fournies pour travailler avec les variables d'environnement.
104112
105113[GetEnvironmentVariable](http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentvariable.html)
106114
107115[GetEnvironmentString](http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentstring.html)
108116
109117[GetEnvironmentVariableCount](http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentvariablecount.html)
110118
111119Exemple:
112120
113121``` pascal
114122var
115123 I: Integer;
116124begin
117125 WriteLn('PATH = ' + GetEnvironmentVariable('PATH'));
118126
119127 WriteLn('Toutes les variables d''environnement:');
120128 for I := 0 to GetEnvironmentVariableCount - 1 do
121129 WriteLn(GetEnvironmentString(I));
122130end.
123131```
124132
125133Il est aussi possible de charger toutes les variables d'environnement dans un objet TStringList et d'accéder à une paire nom-valeur de manière simple. En effet, la liste de chaîne manipule automatiquement le séparateur qui est par défaut '='.
126134
127135``` pascal
128136var
129137 I: Integer;
130138 EnvVars: TStringList;
131139begin
132140 EnvVars := TStringList.Create;
133141 try
134142 // Charge toutes les variables dans une liste de chaînes
135143 for I := 0 to GetEnvironmentVariableCount - 1 do
136144 EnvVars.Add(GetEnvironmentString(I));
137145
138146 WriteLn('PATH = ' + EnvVars.Values['PATH']);
139147
140148 WriteLn('Toutes les variables d''environnement:');
141149 for I := 0 to EnvVars.Count - 1 do
142150 WriteLn(EnvVars.Names[I] + ' = ' + EnvVars.ValueFromIndex[I]);
143151 finally
144152 EnvVars.Free;
145153 end;
146154end.
147155```
148156
149157---
150158*From the Free Pascal wiki, page "Command line parameters and environment variables/fr", as it stood on 2020-02-11 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).*

Back to history