コード例 #1
0
ファイル: CommandArgs.cs プロジェクト: taliu/LReader
 public static CommandArgs Parse(string[] args)
 {
     var commandArgs = new CommandArgs();
     for (int i = 0; i < args.Length; i++)
     {
         var item = args[i];
         if (item == "-" || item == "--")
         {
             continue;
         }
         if (item.StartsWith("-"))
         {
             var key = item.Substring(1);//移除 - 或 --
             if (key[0] == '-')
             {
                 key = key.Substring(1);
             }
             if (i + 1 < args.Length)//后面是否跟一个值
             {
                 var nextItem = args[i + 1];
                 if (nextItem.StartsWith("-"))
                 {
                     commandArgs.ArgPairs.Add(key, "true");//不是跟一个值,则使用true代替
                 }
                 else
                 {
                     nextItem = RecoveryValue(nextItem);
                     commandArgs.ArgPairs.Add(key, nextItem);
                     i++;
                 }
             }
             else
             {
                 commandArgs.ArgPairs.Add(key, "true");
             }
         }
         else
         {
             item = RecoveryValue(item);
             commandArgs.Params.Add(item);
         }
     }
     return commandArgs;
 }
コード例 #2
0
        private static CmdArg GetCmdArg(string[] args, ref string errorMsg)
        {
            var cmdArgs = CommandArgs.Parse(args);

            if (cmdArgs.Params == null || cmdArgs.Params.Count <= 1)
            {
                errorMsg = "命令有误!";
                return(null);
            }

            string cmd        = "";//head or tail
            string path       = "";
            uint   lines      = 10;
            string outputFile = "";
            string encoding   = "";
            string temp       = "";


            //find args
            string keyword    = "";
            string regex      = "";
            bool   readHead   = true;
            bool   ignoreCase = false;

            cmd = cmdArgs.Params[0].Trim().ToLower();

            path = cmdArgs.Params[1];
            if (string.IsNullOrEmpty(path) || !File.Exists(path))
            {
                errorMsg = "错误:不存在文件 " + path;
                return(null);
            }
            if (cmdArgs.ArgPairs.TryGetValue("n", out temp) || cmdArgs.ArgPairs.TryGetValue("lines", out temp))
            {
                if (!uint.TryParse(temp, out lines))
                {
                    errorMsg = "错误:参数 -n 或 --lines 要为整数";
                    return(null);
                }
            }
            if (cmdArgs.ArgPairs.TryGetValue("o", out temp) || cmdArgs.ArgPairs.TryGetValue("output", out temp))
            {
                outputFile = temp;
            }
            if (cmdArgs.ArgPairs.TryGetValue("c", out temp) || cmdArgs.ArgPairs.TryGetValue("encoding", out temp))
            {
                encoding = temp;
            }


            if (cmdArgs.ArgPairs.TryGetValue("k", out temp) || cmdArgs.ArgPairs.TryGetValue("keyword", out temp))
            {
                keyword = temp;
            }
            if (cmdArgs.ArgPairs.TryGetValue("r", out temp) || cmdArgs.ArgPairs.TryGetValue("regex", out temp))
            {
                regex = temp;
            }

            if (cmdArgs.ArgPairs.TryGetValue("t", out temp) || cmdArgs.ArgPairs.TryGetValue("tail", out temp))
            {
                readHead = string.IsNullOrEmpty(temp);
            }

            if (cmdArgs.ArgPairs.TryGetValue("i", out temp) || cmdArgs.ArgPairs.TryGetValue("ignoreCase", out temp))
            {
                ignoreCase = !string.IsNullOrEmpty(temp);
            }

            return(new CmdArg
            {
                CmdName = cmd,
                Encoding = encoding,
                FileName = path,
                Lines = lines,
                OutputFile = outputFile,

                IgnoreCase = ignoreCase,
                Keyword = keyword,
                ReadHead = readHead,
                Regex = regex
            });
        }