![]() |
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 ![]() Hat mir jemand einen Tipp? |
AW: unit für command line parameter
Da gibt es sicher mehrere. Eines ist das von Vincent Parret:
![]() |
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:
ergibt
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.
Code:
bei einem Aufruf mit
isVerbose: 1
inputPath: "" outputPath: "C:\users\public\someFile.dat"
Code:
Für nicht allzu komplizierte Fälle reicht so etwas doch schon aus?
/isVerbose /outputpath:C:\users\public\someFile.dat
|
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. |
AW: unit für command line parameter
|
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: |
AW: unit für command line parameter
Da ist noch einer:
![]() Siehe auch hier: ![]() |
AW: unit für command line parameter
Zitat:
![]() PS: Diese Funktion verwende ich selbst für einige meiner Kommandozeilenprogramme. Grüße Dalai |
AW: unit für command line parameter
Zitat:
|
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.
|
AW: unit für command line parameter
Zitat:
Ich als Admin nutze z.B. auch viel Linux und Windows parallel. Wenn ich dann von einem Linux auf ein Windows System komme und dann statt einen "/" ein "-" für den Parameter eingebe und die Anwendung das auch akzeptiert, dann ist das natürlich umso besser. |
AW: unit für command line parameter
Ja natürlich wird beides unterstützt. Die Funktion erkennt standardmässig sowohl "-" als auch "/" als Switch-Zeichen. Wenn man noch zusätzliche will, kann man das mit einem Parameter angeben:
Delphi-Quellcode:
// Checkt auf Vorhandensein des Switches -a /a if FindCmdLineSwitch('a') then WriteLn('Switch a ist gesetzt'); // Checkt auf Vorhandensein der Switches *a !a -a /a if FindCmdLineSwitch('a', ['*', '!', '-', '/'], True) then WriteLn('Switch a ist gesetzt'); |
AW: unit für command line parameter
Zitat:
Ich wollte es nur anmerken, da es bei dir ein bisschen so rüber kam (zumindest in meinen Augen), also ob man unter Windows gefälligst ein "/" und unter Linux ein "-" anzugeben hat. :cyclops: |
AW: unit für command line parameter
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:31 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz