Command line parameters and environment variables/fi

From Lazarus wiki

English (en) español (es) suomi (fi) français (fr)

Yleistä

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:

 fpc -Fudirectory -gh unit1.pas

Komentoriviparametrit

Perustiedot

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ä.

program Project1;

{$mode objfpc}{$H+}

var
  I: Integer;
begin
  WriteLn('Program: ', ParamStr(0));
  for I := 1 to ParamCount do
    WriteLn('Param ', I, ': ', ParamStr(I));
end.

Esimerkiksi:

 $ /tmp/project1 -a
 Program: /tmp/project1
 Param 1: -a

Käyttäjäystävällisyys

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.

Jokainen LCL sovellus käyttää tätä automaattisesti. Sovelluksen luokkana on TCustomApplication.

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.


Tarkista parameterit

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 .

if HasOption('h', 'help') then begin
  WriteHelp;
  Halt;
end;

Huomaa: LCL:n käytössä täytyy liittää alkuun Application. HasOption lauseen eteen. Esimerkiksi:

if Application.HasOption('h', 'help') then begin
  WriteHelp;
  Halt;
end;


// Jos halutaan tukea ainoastaan lyhyttä tapaa :
if HasOption('h', '') then ...

//Jos halutaan tukea ainoastaan pitkää tapaa :
if HasOption('help') then ...

Luetaan parameterin arvo

Kullekin parametrille voidaan antaa arvo. Esimerkiksi:

 project1 -f filename

tai pidemmällä muodolla:

 project1 --file=filename
WriteLn('f=', GetOptionValue('f', 'file'));

Huomaa: jos saat virheilmoituksen Option at position 1 needs an argument : f. niin unohdettiin lisätä kutsu CheckOptions .

Tarkistetaan parametrien oikeellisuus

Komentoriviparametrit ovat vapaasti kirjoitettua tekstiä, jolloin käyttäjä voi helposti kirjoittaa virheitä. Parametrien syntaksin tarkistaminen on pakollista. Tähän voidaan käyttää 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.

Esimerkki:

ErrorMsg := CheckOptions('hf:', 'help file:');

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.

Ympäristömuuttujat

Kolme perustoimintoa ympäristömuuttujien kanssa työskentelyyn ovat: GetEnvironmentVariable

GetEnvironmentString

GetEnvironmentVariableCount


Esimerkki:

var
  I: Integer;
begin
  WriteLn('PATH = ' + GetEnvironmentVariable('PATH'));

  WriteLn('All environment variables:');
  for I := 0 to GetEnvironmentVariableCount - 1 do 
    WriteLn(GetEnvironmentString(I));
end.

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 "=".

var
  I: Integer;
  EnvVars: TStringList;
begin
  EnvVars := TStringList.Create;
  try
    // Lataa kaikki ympäristömuuttujat string list :n
    for I := 0 to GetEnvironmentVariableCount - 1 do 
      EnvVars.Add(GetEnvironmentString(I));

    WriteLn('PATH = ' + EnvVars.Values['PATH']);

    WriteLn('All environment variables:');
    for I := 0 to EnvVars.Count - 1 do 
      WriteLn(EnvVars.Names[I] + ' = ' + EnvVars.ValueFromIndex[I]);
  finally 
    EnvVars.Free;
  end;
end.

Myös TApplication luokalla on metodi jolla saadaan kaikki ympäristömuuttujat kerralla TStrings list olioon.

var
  EnvVars: TStringList;
begin
  EnvVars := TStringList.Create;
  try
    Application.GetEnvironmentList(EnvVars);
    ...
  finally 
    EnvVars.Free;
  end;
end;