Konsolenapplikation mit mehreren Params

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
kirchfritz
Beiträge: 218
Registriert: Mo 3. Jan 2011, 13:34
OS, Lazarus, FPC: Win11 (L 3.0 FPC 3.2.2)
CPU-Target: 64Bit
Wohnort: Nürnberg

Konsolenapplikation mit mehreren Params

Beitrag von kirchfritz »

Hallo,

ich möchte eine Konsolenanwendung mit Lazarus schreiben, und dabei sollen fünf Parameter als Name/Wert-Paare übergeben werden.
Der Kommandozeilenaufruf der fertigen Anwendung könnte zum Beispiel so aussehen:

MeineAnwendung -a 123 -b 456 -c 789 -d xxx -e zzz

Dazu habe ich mir in Lazarus unter Datei->Neu->Konsolenanwendung ein Grundgerüst erstellen lassen.

Leider weiß ich jetzt nicht mehr weiter.

Was genau bewirkt die function CustApp.CheckOptions('h','help') ?
Wie gibt man dort an, dass fünf Programm-Parameter erlaubt sind?
Wie liest man die fünf Programm-Parameter im Programm?

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: Konsolenapplikation mit mehreren Params

Beitrag von Michl »

kirchfritz hat geschrieben:Was genau bewirkt die function CustApp.CheckOptions('h','help') ?
Siehe http://www.freepascal.org/docs-html/fcl ... tions.html (prüft, ob ein übergebener Parameter gültig ist, in diesem Fall sind die Paramter "-h" oder "-help" zulässig)
kirchfritz hat geschrieben:Wie gibt man dort an, dass fünf Programm-Parameter erlaubt sind?
Nein, das könntest Du aber bei dem Aufruf mit Parameter -h bei TMyApplication.WriteHelp ausgeben.
kirchfritz hat geschrieben:Wie liest man die fünf Programm-Parameter im Programm?
z.B:

Code: Alles auswählen

  // quick check parameters
  ErrorMsg:=CheckOptions('a, b, c, d, e, h','');
  if ErrorMsg<>'' then begin
    ShowException(Exception.Create(ErrorMsg));
    Terminate;
    Exit;
  end;
 
  // parse parameters
  if HasOption('h','help') then begin
    WriteHelp;
    Terminate;
    Exit;
  end;
 
  { add your program here }
 
  Writeln(GetOptionValue('a'));
  Writeln(GetOptionValue('b'));
  Writeln(GetOptionValue('c'));
  Writeln(GetOptionValue('d'));
  Writeln(GetOptionValue('e'));
 
  Writeln('Alternativ:');
 
  //oder
 
  i:=1;  //0 ist eigener Pfad+Programmname
  repeat
    Para:=ParamStr(i);
    writeln(Para);
    inc(i);
  until length(Para)=0;
  Readln;
 
  // stop program loop
  Terminate;  
[Edit] noch mal angepasst, wie von M.Fuchs vorgeschlagen...
Zuletzt geändert von Michl am Fr 3. Jan 2014, 16:15, insgesamt 2-mal geändert.

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2816
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Konsolenapplikation mit mehreren Params

Beitrag von m.fuchs »

Ich habe die Vorlage "Konsolenanwendung" nie so richtig verstanden und nutze diese nicht. Neues Projekt => Programm ist meine Wahl für Konsolenanwendungen.

Für Kommandozeilenparamter existiert auch die Unit GetOpts. Dort gibt es ein ausführliches Beispiel für Parameterübergaben: http://www.freepascal.org/docs-html/rtl ... etopt.html
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de


Antworten