Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   unit für command line parameter (https://www.delphipraxis.net/202297-unit-fuer-command-line-parameter.html)

freimatz 17. Okt 2019 09:33

Delphi-Version: 5

unit für command line parameter
 
Hallo,
ich bin an einem neuen commandozeilen Tool dran. Da sollen auch Parameter (Dateinamen, Option) übergeben werden können. Klar könnte ich das mit ParamStr und so selber machen. Da gibt es aber sicher eine unit die dabei helfen kann. Ich meine mich zu erinnern an etwas wo man Option registrieren konnte.
Trotz einigem Googeln fand ich nichts fertiges.
Das hier macht das, deckt aber nur einen Spezialfall ab.
Hat mir jemand einen Tipp?

Uwe Raabe 17. Okt 2019 09:49

AW: unit für command line parameter
 
Da gibt es sicher mehrere. Eines ist das von Vincent Parret: https://github.com/VSoftTechnologies...mandLineParser

Der schöne Günther 17. Okt 2019 09:53

AW: unit für command line parameter
 
Wobei - Und das ist nur mein persönlicher Geschmack - ich denke dass man so etwas schneller selbst gebaut und auf seine eigenen Bedürfnisse zugeschnitten hat als sich in eine neue Library eingearbeitet, Lizenztexte gelesen und verstanden hat und und und.

Delphi-Quellcode:
program Project9;

{$APPTYPE CONSOLE}
{$R *.res}

uses System.SysUtils;

type
   TCommandLineArgs = record
      isVerbose:   Boolean;
      inputPath:   String;
      outputPath:   String;

      function ToString(): String; inline;
   end;

function getCommandLineArgs(const commandLine: String): TCommandLineArgs;
begin
   Result.isVerbose := FindCmdLineSwitch('isVerbose');
   if not FindCmdLineSwitch('inputPath', Result.inputPath) then
      Result.inputPath := String.Empty;
   if not FindCmdLineSwitch('outputPath', Result.outputPath) then
      Result.outputPath := String.Empty;
end;

{ TCommandLineArgs }

function TCommandLineArgs.ToString(): String;
begin
   Result :=
      String.Format('isVerbose: %d', [isVerbose.ToInteger()])
      + sLineBreak + String.Format('inputPath: "%s"', [inputPath])
      + sLineBreak + String.Format('outputPath: "%s"', [outputPath]);
end;

begin
   WriteLn( getCommandLineArgs(CmdLine).ToString() );
end.
ergibt

Code:
isVerbose: 1
inputPath: ""
outputPath: "C:\users\public\someFile.dat"
bei einem Aufruf mit
Code:
/isVerbose /outputpath:C:\users\public\someFile.dat
Für nicht allzu komplizierte Fälle reicht so etwas doch schon aus?

Jasocul 17. Okt 2019 11:06

AW: unit für command line parameter
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mir irgendwann mal eine Mini-Komponente dafür gebastelt.
Das ist zwar völlig unkommentiert, aber bei ca. 100 Zeilen Code, kann man sich da wohl "einarbeiten".

Das war damals nur mal so hingepfuscht, aber vielleicht hilft es ja weiter.

TigerLilly 17. Okt 2019 11:16

AW: unit für command line parameter
 
Ein paar Ergänzungen:

https://github.com/benibela/rcmdline
https://www.thedelphigeek.com/2014/1...e-parsing.html
https://larsfosdal.blog/category/knowledge/code/delphi/

freimatz 17. Okt 2019 11:36

AW: unit für command line parameter
 
Danke an alle.

@Uwe: genau die hatte ich schon mal gesehen und mich vage daran erinnert. Die werde ich wohl auch nehmen. Sauber programmiert mit unit tests. Das sieht man leider selten.

@Günther: nun ja, ich will es ja nicht nur auf meine "eigenen Bedürfnisse" sondern die der Anwender. Und wenn da einer zum Beispiel statt "-i" ein "/i" nehmen will soll er es machen können ohne dass ich da was tun muss. Lizenztexte gelesen hat ca. 20 Sekunden gedauert "Apache" gelesen, bei uns im wiki nachgeschaut ob genehmigt - gut. ;-)
Ich fürchte das Tool wo ich gerade anfange wird auch mal ein komplizierter Fall, es riecht schon nach Fass ohne Boden. :wink:

TigerLilly 17. Okt 2019 11:53

AW: unit für command line parameter
 
Da ist noch einer:
https://osdn.net/projects/dzlib-tool...LineParser.pas

Siehe auch hier:
https://en.delphipraxis.net/topic/14...r-delphi-103x/

Dalai 17. Okt 2019 15:17

AW: unit für command line parameter
 
Zitat:

Zitat von freimatz (Beitrag 1449859)
Und wenn da einer zum Beispiel statt "-i" ein "/i" nehmen will soll er es machen können ohne dass ich da was tun muss.

Das kann in Delphi standardmäßig vorhandene Delphi-Referenz durchsuchenFindCmdLineSwitch schon.

PS: Diese Funktion verwende ich selbst für einige meiner Kommandozeilenprogramme.

Grüße
Dalai

freimatz 18. Okt 2019 10:37

AW: unit für command line parameter
 
Zitat:

Zitat von freimatz (Beitrag 1449859)
Und wenn da einer zum Beispiel statt "-i" ein "/i" nehmen will soll er es machen können ohne dass ich da was tun muss.

So deutlicher? :wink:

Rolf Frei 18. Okt 2019 13:31

AW: unit für command line parameter
 
Lies mal die Doku zu FindCmdLineSwitch. Da hst du einen Parameter bei dem du angeben kannst was für Switch-Zeichen erlaubt sein sollen. - (Unix) / (Windows) sind Standard und wer was anderes eingibt hat das nicht verstanden. Wieso du da also noch andere Zeichen dafür verwenden willst, ist mir ein Rätsel.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:14 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz