Sign in Join
Wiki copytemporary

Command line parameters and environment variables/fi: what changed

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

Title: Command line parameters and environment variables/fi

OldNewLine
1+## Yleistä
2+
3+Kun 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:
4+
5+` fpc -Fudirectory -gh unit1.pas`
6+
7+## Komentoriviparametrit
8+
9+### Perustiedot
10+
11+Pascal 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ä.
12+
13+``` pascal
14+program Project1;
15+
16+{$mode objfpc}{$H+}
17+
18+var
19+ I: Integer;
20+begin
21+ WriteLn('Program: ', ParamStr(0));
22+ for I := 1 to ParamCount do
23+ WriteLn('Param ', I, ': ', ParamStr(I));
24+end.
25+```
26+
27+Esimerkiksi:
28+
29+` $ /tmp/project1 -a`\
30+` Program: /tmp/project1`\
31+` Param 1: -a`
32+
33+### Käyttäjäystävällisyys
34+
35+Hyvä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.
36+
37+Jokainen LCL sovellus käyttää tätä automaattisesti. Sovelluksen luokkana on TCustomApplication.
38+
39+Jos 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.
40+
41+#### Tarkista parameterit
42+
43+TCustomApplication 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` .
44+
45+``` pascal
46+if HasOption('h', 'help') then begin
47+ WriteHelp;
48+ Halt;
49+end;
50+```
51+
52+Huomaa: LCL:n käytössä täytyy liittää alkuun `Application.` HasOption lauseen eteen. Esimerkiksi:
53+
54+``` pascal
55+if Application.HasOption('h', 'help') then begin
56+ WriteHelp;
57+ Halt;
58+end;
59+```
60+
61+``` pascal
62+// Jos halutaan tukea ainoastaan lyhyttä tapaa :
63+if HasOption('h', '') then ...
64+
65+//Jos halutaan tukea ainoastaan pitkää tapaa :
66+if HasOption('help') then ...
67+```
68+
69+#### Luetaan parameterin arvo
70+
71+Kullekin parametrille voidaan antaa arvo. Esimerkiksi:
72+
73+` project1 -f filename`
74+
75+tai pidemmällä muodolla:
76+
77+` project1 --file=filename`
78+
79+``` pascal
80+WriteLn('f=', GetOptionValue('f', 'file'));
81+```
82+
83+Huomaa: jos saat virheilmoituksen *Option at position 1 needs an argument : f.* niin unohdettiin lisätä kutsu *CheckOptions* .
84+
85+#### Tarkistetaan parametrien oikeellisuus
86+
87+Komentoriviparametrit 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.
88+
89+Esimerkki:
90+
91+``` pascal
92+ErrorMsg := CheckOptions('hf:', 'help file:');
93+```
94+
95+Tä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.
96+
97+## Ympäristömuuttujat
98+
99+Kolme perustoimintoa ympäristömuuttujien kanssa työskentelyyn ovat: [GetEnvironmentVariable](http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentvariable.html)
100+
101+[GetEnvironmentString](http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentstring.html)
102+
103+[GetEnvironmentVariableCount](http://www.freepascal.org/docs-html/rtl/sysutils/getenvironmentvariablecount.html)
104+
105+Esimerkki:
106+
107+``` pascal
108+var
109+ I: Integer;
110+begin
111+ WriteLn('PATH = ' + GetEnvironmentVariable('PATH'));
112+
113+ WriteLn('All environment variables:');
114+ for I := 0 to GetEnvironmentVariableCount - 1 do
115+ WriteLn(GetEnvironmentString(I));
116+end.
117+```
118+
119+On 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 "=".
120+
121+``` pascal
122+var
123+ I: Integer;
124+ EnvVars: TStringList;
125+begin
126+ EnvVars := TStringList.Create;
127+ try
128+ // Lataa kaikki ympäristömuuttujat string list :n
129+ for I := 0 to GetEnvironmentVariableCount - 1 do
130+ EnvVars.Add(GetEnvironmentString(I));
131+
132+ WriteLn('PATH = ' + EnvVars.Values['PATH']);
133+
134+ WriteLn('All environment variables:');
135+ for I := 0 to EnvVars.Count - 1 do
136+ WriteLn(EnvVars.Names[I] + ' = ' + EnvVars.ValueFromIndex[I]);
137+ finally
138+ EnvVars.Free;
139+ end;
140+end.
141+```
142+
143+Myös TApplication luokalla on metodi jolla saadaan kaikki ympäristömuuttujat kerralla TStrings list olioon.
144+
145+``` pascal
146+var
147+ EnvVars: TStringList;
148+begin
149+ EnvVars := TStringList.Create;
150+ try
151+ Application.GetEnvironmentList(EnvVars);
152+ ...
153+ finally
154+ EnvVars.Free;
155+ end;
156+end;
157+```
158+
159+---
160+*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