首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# Visio 二次開發:Web 端啟動繪圖客戶端並自動登入(三)——CommandLine 參數解析通用類完整實現

     編輯:關於C語言

CommandArgs / CommandLine 完整原始碼


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

namespace WHC.EDNMS.Commons
{
    public class CommandArgs
    {
        Dictionary<string, string> mArgPairs = new Dictionary<string, string>();
        public Dictionary<string, string> ArgPairs { get { return mArgPairs; } }
        public List<string> Params { get { return mParams; } }
        List<string> mParams = new List<string>();
    }

    public class CommandLine
    {
        /// 
        /// 支援格式: CMD [param] [[-|--|\]<arg>[[=]<value>]] [param]
        /// 範例: cmd first -o outfile.txt --compile second \errors=errors.txt third fourth --test = "the value" fifth
        /// 
        public static CommandArgs Parse(string[] args)
        {
            char[] kEqual = new char[] { '=' };
            char[] kArgStart = new char[] { '-', '\\' };
            CommandArgs ca = new CommandArgs();
            int ii = -1;
            string token = NextToken(args, ref ii);
            
            while (token != null)
            {
                if (IsArg(token))
                {
                    string arg = token.TrimStart(kArgStart).TrimEnd(kEqual);
                    string value = null;
                    
                    if (arg.Contains("="))
                    {
                        string[] r = arg.Split(kEqual, 2);
                        if (r.Length == 2 && r[1] != string.Empty)
                        { arg = r[0]; value = r[1]; }
                    }
                    
                    while (value == null)
                    {
                        string next = NextToken(args, ref ii);
                        if (next != null)
                        {
                            if (IsArg(next))
                            { ii--; value = "true"; }
                            else if (next != "=")
                            { value = next.TrimStart(kEqual); }
                        }
                    }
                    ca.ArgPairs.Add(arg, value);
                }
                else if (token != string.Empty)
                {
                    ca.Params.Add(token);
                }
                token = NextToken(args, ref ii);
            }
            return ca;
        }

        static bool IsArg(string arg)
        { return (arg.StartsWith("-") || arg.StartsWith("\\")); }

        static string NextToken(string[] args, ref int ii)
        {
            ii++;
            while (ii < args.Length)
            {
                string cur = args[ii].Trim();
                if (cur != string.Empty) return cur;
                ii++;
            }
            return null;
        }
    }
}

支援特性總覽

  • 多種前綴:-、--、\
  • 鍵值分隔:空白或 =(-o file 或 -o=file)
  • 值含空白:需雙引號包裹 --test = "the value"
  • 布林旗標:無值參數預設 true(-v → v=true)
  • 獨立參數:非旗標參數收集至 Params 列表
  • 大小寫不敏感:旗標鍵名比較忽略大小寫

使用範例


string[] args = new string[] { "-u", "admin", "-p", "encrypted_token" };
CommandArgs ca = CommandLine.Parse(args);
// ca.ArgPairs["u"] == "admin"
// ca.ArgPairs["p"] == "encrypted_token"
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved