以前コマンドライン引数の取得について書いたとき、FindCmdLineSwitchという関数があることを教えてもらった。
Delphiでコマンドライン引数を取得する - 偏った言語信者の垂れ流し
System.SysUtils.FindCmdLineSwitch - XE3 API Documentation
試してみたのだけど、FindCmdLineSwitchだと、スイッチ部分以外のパラメータを取得したりできなかったり、"--foo=bar"みたいな形式の値指定ができなかったので、自作することにした。
tokibito / delphi-argparse — Bitbucket
使い方はこんな感じ。
var Parser: TArgumentParser; ParseResult: TParseResult; begin Parser := TArgumentParser.Create; Parser.AddArgument('--foo', saBool); // --fooという名前の値なしスイッチ Parser.AddArgument('--bar', saStore); // --bar bar_value形式のスイッチ ParseResult := Parser.ParseArgs; // パースする(TList<String>な引数を省略するとParamStrの内容が使われる ParseResult.HasArgument('foo'); // --fooが指定されてたらTrueが返される ParseResult.GetValue('bar'); // --barで指定された値が返される(String) end;
ParseResultは取得したら自前で開放する必要がある。
おそらく名前空間の指定方法とかの関係でDelphiXE3でしか動かない。
Pythonのargparseと比べると貧弱すぎるけど、自分で使う分にはなんとか足りるかな。