Visual Studioの設定

それでは、コードを見ていきましょう。ここでは、Visual Studio 2008でC#のコンソールアプリケーションを作成して「CommandLine.dll」に参照設定を行っています。

オプション用クラスの設定

まず、引数の値を格納するOptionsクラスを作成します。ここでは属性を使ってオプション(短縮名・正式名・必須・説明)を設定しています。

引数の値を格納するOptionsクラス

using System.Collections.Generic;
using CommandLine;
using CommandLine.Text;

namespace ConsoleSample
{
  //引数を格納するクラス
  class Options
  {
    //(1)Option属性
    [Option("x", "numx",Required = true,HelpText = "数字X")]
    public int X;

    [Option("y", "numy",Required = true,HelpText = "数字Y")]
    public int Y;

    [Option(null , "desc" ,HelpText = "画面に表示する説明")]
    public string Description;

    //(2)OptionList属性
    [OptionList("o", null,Required = true,
      Separator = ',',HelpText = "カンマ区切りの演算子群 (+,-,*,/)")]
    public IList Operators;

    //(3)HelpOption属性
    [HelpOption(HelpText= "ヘルプを表示")]
    public string GetUsage()
    {
      //ヘッダーの設定
      HeadingInfo head = new HeadingInfo("ConsoleSample", "Version 1.0");
      HelpText help = new HelpText(head);
      help.Copyright = new CopyrightInfo("青木 淳夫", 2009);
      help.AddPreOptionsLine("Command Line Parser Libraryサンプル");
      help.AddPreOptionsLine("構文の例: ConsoleSample.exe -x12 -y 4 -o+,-,/ --desc=12と4で計算");

      //全オプションを表示(1行間隔)
      help.AdditionalNewLineAfterOption = true;
      help.AddOptions(this);

      return help.ToString();
    }
  }
}

Command Line Parser Libraryではフィールドとメソッドに設定できる5種類の属性が存在します。ここでは、Option、OptionList、HelpOption属性を使用しています。

(1)Option属性

Option属性はフィールド(string型、int型等)とオプションを紐づけることができます。例えば[Option("x", "numx")]と宣言すると、短縮名「x」と正式名「numx」をフィールドに紐づけできます。もし「-x 10」や「--numx 10」という引数であれば、10という値がXフィールドにセットされます。

(2)OptionList属性

OptionList属性はIList型のフィールドに値を格納できます。例えば引数に「-o +,-,*」と指定した場合「+」「-」「*」の3つの値がIList<string>に格納されます。区切り文字にカンマを使用するため「Separator = ','」と宣言しています。

(3)HelpOption属性

HelpOption属性はヘルプを出力するメソッドに宣言します。ここではHelpText(ヘルプ文字列)、HeadingInfo(ヘッダ)、CopyrightInfo(コピーライト)といったサポートクラスを使って文字列を生成しています。

ヘルプメッセージ(ヘッダ、Copyright、オプション一覧を表示)

「HelpText」に設定したメッセージや「Required」に設定した必須項目が表示されていることがわかります。