不知道这里有多少人和我一样喜欢CUI,很多程序我都喜欢写成CUI的来做,这样结合bat可以
组合出很强大的东东.但是命令行的参数处理是一个很繁琐的事,Main函数只是简单的切割
成了string数组,要弄成cmd那些拥有复杂选项的命令的话解析部分只有自己做╮(╯_╰)╭.这是前段时间做的一个Console程序的命令行解析部分整理后独立出来后再完善弄出的东西.
采用了我比较常用的windows script风格的命令行选项格式(/name:value 或 -name:value)
支持命名参数和匿名参数的识别,支持将命名参数值填充到对象的字段/属性填充时可以识别以下类型:整数(I1~I8都可,支持2进制,10进制,8进制,16进制的表达式),
浮点数(float/double)
布尔表达式(具体值或简化的表达式),
字符串(可使用转义以使用包含空白字符的字符串)
枚举类型(可以是任意自定义的enum,支持使用flags标记的选项枚举类型)具体可以看自带的txt文档和test调用示例Download

解决方案 »

  1.   

    不错,小工具经常用Console,简单方便
      

  2.   

    楼主说的很对,CUI的东西,可以写成bat,组合成各种强大的功能!支持!
      

  3.   

    楼主直接用C#将你要写的一些命令打包让后再将文件后缀设置成BAT文件不是也可以解决问题吗?
      

  4.   

    不错的东西,Mark一下,LZ辛苦了。不过顺便吐槽一下,一般来说是CLI(Command Line Interface)而很少说CUI吧。
      

  5.   

    学习学习 中国c#讨论群9134476 欢迎c# 爱好者加入 加入时请备注 csdn论坛
      

  6.   

    MD不填会死啊?
    D不填会死啊?
    不填会死啊?
    填会死啊?
    会死啊?
    死啊?
    啊? 
      

  7.   

    MD不填会死啊?
    D不填会死啊?
    不填会死啊?
    填会死啊?
    会死啊?
    死啊?
    啊? 
      

  8.   

    就是用来实现类似cmd命令行里的那些命令的参数.
    比如csc /r:system.dll /t:library 1.cs
    这样一段命令行,这个类库可以把它拆分成对应的名字到值的映射:
    r->system.dll
    t->library
    另外附加的功能则是通过名字和一些预定表达式将值填充到对象的属性/字段
    今天发现一个比较严重的bug:链表排序插入时一时粗心忘了处理字符串对比结果<0的情况
    位于函数ArgumentAnalyzer.addNamedItem (analyzeContext context,string name,string value)中,会导致识别出了的参数的丢失囧...更正如下:    void addNamedItem (analyzeContext context,string name,string value){//插入链表同时排序
            var list = context.named;
            //Console.WriteLine("named: {0}={1},{2}", name, value, list.Count);
            if (list.First == null)
            {
                list.AddLast(new tempNamedArg(name, value));
                return;
            }
            var node = list.First;
            while (node != null)
            {
                var cmpresult = strCmp(name, node.Value.name);            if (cmpresult == 0)
                {
                    node.Value.values.Add(value);
                    return;
                }
                if (cmpresult > 0)
                {
                    if (node.Next == null || strCmp(name, node.Next.Value.name) < 0)
                    {
                        //找到插入点,插入
                        list.AddAfter(node, new tempNamedArg(name, value));
                        return;
                    }
                }
                if (cmpresult < 0)
                {
                    list.AddBefore(node, new tempNamedArg(name, value));
                    return;
                }
                node = node.Next;
            }
        }
      

  9.   


    /*
     *Getopt.cs -- C#.NET port of Java port of GNU getopt from glibc 2.0.6
     */
      

  10.   

    GUI 是什么东东 每天回帖10分
      

  11.   

    CUI我还不晓得是什么东东呢 原来是CLI