Sign in Join
Wiki copytemporary

Command line parameters and environment variables/fi: what changed

Revision 3 to 4. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## Yleistä
22
33Kun ohjelma käynnistetään käyttäjä voi antaa komentoriviparametrejä ja asettaa ympäristömuuttujat. Esimerkiksi Free Pascal kääntäjä saa suurimman osan parametreistä komentorivin kautta:
44
5-` fpc -Fudirectory -gh unit1.pas`
5+```text
6+ fpc -Fudirectory -gh unit1.pas
7+```
68
79## Komentoriviparametrit
810
911### Perustiedot
1012
1113Pascal ohjelmaa voi käyttää ParamStr ja ParamCount parametrien kautta. ParamStr (0) kertoo itse ohjelman nimen (ja polun _jos_ käyttöjärjestelmä tukee sitä). ParamStr (1) on ensimmäinen parametri. ParamCount on parametrien määrä.
1214
1315``` pascal
1416program Project1;
1517
1618{$mode objfpc}{$H+}
1719
1820var
1921 I: Integer;
2022begin
2123 WriteLn('Program: ', ParamStr(0));
2224 for I := 1 to ParamCount do
2325 WriteLn('Param ', I, ': ', ParamStr(I));
2426end.
2527```
2628
2729Esimerkiksi:
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### Käyttäjäystävällisyys
3438
3539Hyvän ohjelman pitäisi antaa ohjeviestin, kun tarjotaan vääriä parametrejä ja sen pitäisi noudattaa yhteistä tapaa käyttää parametreja. FPC:n mukana tuleva käännösyksikkö unit custapp sisältää TCustomApplication luokan, joka tarjoaa toiminnot tarkistaa ja lukea parametrit helposti. Tietenkin voidaan käyttää parametreja suoraan: ParamStr ja ParamCount avulla.
3640
3741Jokainen LCL sovellus käyttää tätä automaattisesti. Sovelluksen luokkana on TCustomApplication.
3842
3943Jos haluat kirjoittaa "ei LCL"- ohjelman, niin luo Lazaruksessa uusi projekti tyyppiä 'komentorivisovellus (Console Application)'. Tämä luo tiedoston project1.lpr jossa on joitakin mukavia "herkkuja", joita lähes kaikki ohjelmat tarvitsevat. Siirry doRun metodiin.
4044
4145#### Tarkista parameterit
4246
4347TCustomApplication luokassa voit käyttää parametreja nimen mukaan. Esimerkiksi ohjelma jonka pitäisi tulostaa ohjeteksti kun käyttäjä antaa yleisesti käytössä olevan ohje parametrin `-h` . Parametri `-h` on parametrin `--help` lyhyempi vaihtoehto. Voit testata, mitä tapahtuu kun ohjelma käynnistetään parametrillä `-h` tai `--help` .
4448
4549``` pascal
4650if HasOption('h', 'help') then begin
4751 WriteHelp;
4852 Halt;
4953end;
5054```
5155
5256Huomaa: LCL:n käytössä täytyy liittää alkuun `Application.` HasOption lauseen eteen. Esimerkiksi:
5357
5458``` pascal
5559if Application.HasOption('h', 'help') then begin
5660 WriteHelp;
5761 Halt;
5862end;
5963```
6064
6165``` pascal
6266// Jos halutaan tukea ainoastaan lyhyttä tapaa :
6367if HasOption('h', '') then ...
6468
6569//Jos halutaan tukea ainoastaan pitkää tapaa :
6670if HasOption('help') then ...
6771```
6872
6973#### Luetaan parameterin arvo
7074
7175Kullekin parametrille voidaan antaa arvo. Esimerkiksi:
7276
73-` project1 -f filename`
77+```text
78+ project1 -f filename
79+```
7480
7581tai pidemmällä muodolla:
7682
77-` project1 --file=filename`
83+```text
84+ project1 --file=filename
85+```
7886
7987``` pascal
8088WriteLn('f=', GetOptionValue('f', 'file'));
8189```
8290
8391Huomaa: jos saat virheilmoituksen *Option at position 1 needs an argument : f.* niin unohdettiin lisätä kutsu *CheckOptions* .
8492
8593#### Tarkistetaan parametrien oikeellisuus
8694
8795Komentoriviparametrit ovat vapaasti kirjoitettua tekstiä, jolloin käyttäjä voi helposti kirjoittaa virheitä. Parametrien syntaksin tarkistaminen on pakollista. Tähän voidaan käyttää [[doc:fcl/custapp/tcustomapplication.checkoptions.html|CheckOptions]] menetelmää : Voidaan määritellä, mitkä parametrit ovat sallittuja, mitkä niistä tarvitsevat parametrin ja syntaksivirheen tapauksessa saatavan virheilmoituksen ja vaihtoehdot, jotka tulostetaan hyödyllisinä ja yksityiskohtaiset ​​virheet.
8896
8997Esimerkki:
9098
9199``` pascal
92100ErrorMsg := CheckOptions('hf:', 'help file:');
93101```
94102
95103Tämä sallii lyhyet optiot *-f value* ja *-h*. Se tukee pitkiä vaihtoehtoja *--help* or *--file= tiedostonimi*. Se ei salli *--help* joilla on arvo, eikä --file ilman arvoa.
96104
97105## Ympäristömuuttujat
98106
99107Kolme perustoimintoa ympäristömuuttujien kanssa työskentelyyn ovat: [GetEnvironmentVariable](http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentvariable.html)
100108
101109[GetEnvironmentString](http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentstring.html)
102110
103111[GetEnvironmentVariableCount](http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentvariablecount.html)
104112
105113Esimerkki:
106114
107115``` pascal
108116var
109117 I: Integer;
110118begin
111119 WriteLn('PATH = ' + GetEnvironmentVariable('PATH'));
112120
113121 WriteLn('All environment variables:');
114122 for I := 0 to GetEnvironmentVariableCount - 1 do
115123 WriteLn(GetEnvironmentString(I));
116124end.
117125```
118126
119127On myös mahdollista ladata kaikki ympäristömuuttujat TStringList objektiin ja niihin päästään helposti käsiksi nimi-arvo-parina. String list automaattisesti tottelee merkki erotinta, joka on oletuksena merkki "=".
120128
121129``` pascal
122130var
123131 I: Integer;
124132 EnvVars: TStringList;
125133begin
126134 EnvVars := TStringList.Create;
127135 try
128136 // Lataa kaikki ympäristömuuttujat string list :n
129137 for I := 0 to GetEnvironmentVariableCount - 1 do
130138 EnvVars.Add(GetEnvironmentString(I));
131139
132140 WriteLn('PATH = ' + EnvVars.Values['PATH']);
133141
134142 WriteLn('All environment variables:');
135143 for I := 0 to EnvVars.Count - 1 do
136144 WriteLn(EnvVars.Names[I] + ' = ' + EnvVars.ValueFromIndex[I]);
137145 finally
138146 EnvVars.Free;
139147 end;
140148end.
141149```
142150
143151Myös TApplication luokalla on metodi jolla saadaan kaikki ympäristömuuttujat kerralla TStrings list olioon.
144152
145153``` pascal
146154var
147155 EnvVars: TStringList;
148156begin
149157 EnvVars := TStringList.Create;
150158 try
151159 Application.GetEnvironmentList(EnvVars);
152160 ...
153161 finally
154162 EnvVars.Free;
155163 end;
156164end;
157165```
158166
159167---
160168*From the Free Pascal wiki, page "Command line parameters and environment variables/fi", 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