Esempio n. 1
0
        static string savePath; // = @"i:\totori_cs2\";//保存先パス

        #endregion Fields

        #region Methods

        //**********************************************************************************************
        /// http://nanoappli.com/blog/archives/1281    
        /// <summary>起動引数を取得する
        /// </summary>
        /// <param name="mws"></param>
        //**********************************************************************************************
        private static CommandLine getParam(String[] args)
        {
            Options optdef;

            //---------------------------------------------------------
            // オプションの定義を行う(optName, hasArg, description)
            //---------------------------------------------------------

            optdef = new Options();
            optdef.AddOption("word",    true, "Search word");
            optdef.AddOption("dest",    true, "Destination path");
            optdef.AddOption("page",    true, "Page count");
            optdef.AddOption("engine",  true, "Search engine select");
            optdef.AddOption("verbose", false, "Log print flag");

            //---------------------------------------------------------
            // コマンドラインオプションを解析する
            //---------------------------------------------------------
            OptionParser parser = new OptionParser();
            return parser.parse(optdef, args);
        }
        //*********************************************************************
        /// <summary>	指定されたパラメータを解析する
        /// </summary>
        /// <param name="opts">	パラメータの定義</param>
        /// <param name="args">	渡されたパラメータ値</param>
        /// 
        /// <returns>			解析後のパラメータ情報</returns>
        //*********************************************************************
        public CommandLine parse( Options opts, String[] args )
        {
            CommandLine cl = new CommandLine();
            //---------------------------
            // 解析の元ネタを覚えておく
            //---------------------------
            cl.RawArgs = args;
            cl.Options = opts;

            //-------------------------------------------
            // 全てのパラメータを解析するまで繰り返し
            //-------------------------------------------
            for ( int loop = 0; loop < args.Length; loop++ ) {
                String arg = args[ loop ];

                if ( arg.Equals( "/" ) ) {
                    // スラッシュだけの場合は、値をみなす
                    cl.addParam( "", arg );
                    continue;
                }

                if ( arg.StartsWith( "/" ) ) {
                    // パラメータキーを取得
                    String key   = arg.Substring( 1 );

                    if ( !opts.HasOption( key ) ) {
                        //------------------------------------------------------------------
                        // キーとして定義されていない場合 -> スラッシュから始まる値とみなす
                        //------------------------------------------------------------------
                        cl.addParam( "", arg );
                        continue;
                    }

                    if ( !opts.GetOption( key ).HasArg ) {
                        //------------------------------------------------------------------
                        // キーとして定義されているが、値を持たない場合 -> flagを立てる
                        //------------------------------------------------------------------
                        cl.addParam( key, "true" );
                        continue;
                    }

                    //------------------------------------------------------------
                    // キーとして定義され,値を持つ場合 -> キーと値をペアで覚える
                    //------------------------------------------------------------
                    String value = loop+1 == args.Length ? "" : args[loop+1];
                    cl.addParam( key, value );

                    loop++;	// valueの分、1件先食いしたのでインクリメントする
                    continue;
                }

                //------------------------------------------------
                // そもそもスラッシュから始まらない -> 値とみなす
                //------------------------------------------------
                cl.addParam( "", arg );
            }

            //---------------------------
            // 解析したパラメータを返す
            //---------------------------
            return cl;
        }