예제 #1
0
        internal TableMeta ParseTableMeta(string filename, DataTable dt, string cmp)
        {
            TableMeta meta = new TableMeta();

            meta.TableName = filename;
            //第0行注释 第一行name 第二行type
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                if (!IsExportField(cmp, dt, i))
                {
                    continue;
                }
                TableField field = new TableField();
                field.fieldName = dt.Rows[1].ItemArray[i].ToString();
                field.typeName  = dt.Rows[2].ItemArray[i].ToString();
                if (field.typeName == "int")
                {
                    field.fieldType = TableFieldType.IntField;
                }
                else if (field.typeName == "float")
                {
                    field.fieldType = TableFieldType.FloatField;
                }
                else if (field.typeName == "string")
                {
                    field.fieldType = TableFieldType.StringField;
                }
                else if (field.typeName == "int+")
                {
                    field.fieldType = TableFieldType.IntList;
                }
                else if (field.typeName == "float+")
                {
                    field.fieldType = TableFieldType.FloatList;
                }
                else if (field.typeName == "string+")
                {
                    field.fieldType = TableFieldType.StringList;
                }
                else if (field.typeName[field.typeName.Length - 1] == '+')
                {
                    field.fieldType = TableFieldType.StructList;
                }
                else
                {
                    field.fieldType = TableFieldType.StructField;
                }
                meta.Fields.Add(field);
            }
            return(meta);
        }
예제 #2
0
        static void Main(string[] args)
        {
            string        clientOutDir, serverOutDir, cppOutDir, csOutDir, excelDir, metafile;
            CmdlineHelper cmder = new CmdlineHelper(args);

            if (cmder.Has("--out_client"))
            {
                clientOutDir = cmder.Get("--out_client");
            }
            else
            {
                return;
            }
            if (cmder.Has("--out_server"))
            {
                serverOutDir = cmder.Get("--out_server");
            }
            else
            {
                return;
            }
            if (cmder.Has("--in_excel"))
            {
                excelDir = cmder.Get("--in_excel");
            }
            else
            {
                return;
            }
            if (cmder.Has("--in_tbs"))
            {
                metafile = cmder.Get("--in_tbs");
            }
            else
            {
                return;
            }

            //创建导出目录
            if (!Directory.Exists(clientOutDir))
            {
                Directory.CreateDirectory(clientOutDir);
            }
            if (!Directory.Exists(serverOutDir))
            {
                Directory.CreateDirectory(serverOutDir);
            }

            //先读取tablemata文件
            TableStruct tbs = new TableStruct();

            if (!tbs.ImportTableStruct(metafile))
            {
                Console.WriteLine("解析tbs文件错误!");
                return;
            }
            Console.WriteLine("解析tbs文件成功");

            List <TableMeta> clientTableMetaList = new List <TableMeta>();
            List <TableMeta> serverTableMetaList = new List <TableMeta>();

            //导出文件
            ExcelHelper helper = new ExcelHelper();

            string[] files = Directory.GetFiles(excelDir, "*.xlsx", SearchOption.TopDirectoryOnly);
            foreach (string filepath in files)
            {
                string xmlfile = clientOutDir + Path.GetFileNameWithoutExtension(filepath) + ".txt";
                string txtfile = serverOutDir + Path.GetFileNameWithoutExtension(filepath) + ".txt";
                try
                {
                    DataTable dt = helper.ImportExcelFile(filepath);

                    if (helper.IsExportFile("client", dt))
                    {
                        helper.ExportTxtFileEx(xmlfile, dt, "client", new int[] { 0, 2, 3 });
                        TableMeta meta = helper.ParseTableMeta(Path.GetFileNameWithoutExtension(filepath), dt, "client");
                        clientTableMetaList.Add(meta);
                    }
                    if (helper.IsExportFile("server", dt))
                    {
                        helper.ExportTxtFileEx(txtfile, dt, "server", new int[] { 0, 2, 3 });
                        TableMeta meta = helper.ParseTableMeta(Path.GetFileNameWithoutExtension(filepath), dt, "server");
                        serverTableMetaList.Add(meta);
                    }
                }
                catch (Exception e)
                {
                    Console.WriteLine(filepath + " 文件出错!");
                    Console.WriteLine(e.ToString());
                }
            }
            Console.WriteLine("导出配置文件成功");

            //生成代码
            if (cmder.Has("--out_cpp"))
            {
                cppOutDir = cmder.Get("--out_cpp");
                if (!Directory.Exists(cppOutDir))
                {
                    Directory.CreateDirectory(cppOutDir);
                }

                CodeGen.MakeCppFileTbs(tbs.GetMetaList(), cppOutDir);
                CodeGen.MakeCppFile(serverTableMetaList, cppOutDir);
                Console.WriteLine("生成.cpp代码文件成功");
            }

            if (cmder.Has("--out_cs"))
            {
                csOutDir = cmder.Get("--out_cs");
                if (!Directory.Exists(csOutDir))
                {
                    Directory.CreateDirectory(csOutDir);
                }

                CodeGen.MakeCsharpFileTbs(tbs.GetMetaList(), csOutDir);
                CodeGen.MakeCsharpFile(clientTableMetaList, csOutDir);
                Console.WriteLine("生成.cs代码文件成功");
            }

            Console.WriteLine("按任意键退出...");
            Console.ReadKey(false);
        }
예제 #3
0
        public bool ImportTableStruct(string filepath)
        {
            m_metaList.Clear();
            string[] lines = File.ReadAllLines(filepath);
            for (int i = 0; i < lines.Count(); i++)
            {
                if (Regex.IsMatch(lines[i], @"^\s*//.*$"))
                {
                    continue;
                }                                                       //注释
                if (Regex.IsMatch(lines[i], @"^\s*$"))
                {
                    continue;
                }                                                //空行
                if (Regex.IsMatch(lines[i], @"^\s*\w+\s+{\s*$")) //结构体开始
                {
                    if (m_parseState != ParseState.EndStruct)
                    {
                        Console.WriteLine("tbs文件错误:第{0}行", i);
                        return(false);
                    }
                    m_parseState = ParseState.BeginStruct;
                    Match match = Regex.Match(lines[i], @"^\s*(\w+)\s+{\s*$");
                    m_tableMeta           = new TableMeta();
                    m_tableMeta.TableName = match.Groups[1].Value;
                    continue;
                }
                if (Regex.IsMatch(lines[i], @"^\s*}\s*$"))//结构体结束
                {
                    if (m_parseState != ParseState.BeginStruct)
                    {
                        Console.WriteLine("tbs文件错误:第{0}行", i);
                        return(false);
                    }
                    m_parseState = ParseState.EndStruct;
                    m_metaList.Add(m_tableMeta);
                    continue;
                }
                if (m_parseState == ParseState.BeginStruct)
                {
                    Match m = Regex.Match(lines[i], @"\s*(\w+)\s+(\w+)\s*$");//var type
                    if (m.Success == false)
                    {
                        Console.WriteLine("tbs文件错误:第{0}行", i);
                        return(false);
                    }

                    TableField field = new TableField();
                    field.fieldName = m.Groups[1].Value;
                    field.typeName  = m.Groups[2].Value;
                    switch (field.typeName)
                    {
                    case "int": { field.fieldType = TableFieldType.IntField; break; }

                    case "float": { field.fieldType = TableFieldType.FloatField; break; }

                    case "string": { field.fieldType = TableFieldType.StringField; break; }

                    case "int+": { field.fieldType = TableFieldType.IntList; break; }

                    case "float+": { field.fieldType = TableFieldType.FloatList; break; }

                    case "string+": { field.fieldType = TableFieldType.StringList; break; }

                    default:
                        Console.WriteLine("tbs文件错误:第{0}行", i);
                        return(false);
                    }
                    m_tableMeta.Fields.Add(field);
                    continue;
                }

                Console.WriteLine("tbs文件错误:第{0}行", i);
                return(false);
            }
            return(true);
        }