/// <summary> /// 将 .proto 文件转成 .cs 文件 /// <para>用于项目非ProtoBuf-net类型协议,以后用PB协议的话这里就没有用了</para> /// </summary> /// <param name="inPath"></param> /// <param name="inFolderName"></param> /// <returns></returns> public bool Proto2CSharp(string inPath, string inFolderName) { Assist.CheckFolderExist(inFolderName); Assist.DeleteFilesInFolder("ProtoItem"); Assist.GetObjPaths(".proto", inPath).ForEach(delegate(string path) { FileInfo targetFileInfo = new FileInfo(path); bool bCommonClass = path.EndsWith("_comm.proto"); // 类名 -> 成员列表<成员名, 成员类型> Dictionary <string, Dictionary <string, string> > nClasses = null; if (targetFileInfo != null) { Queue <string> sq = new Queue <string>(); StreamReader sr = new StreamReader(path, System.Text.Encoding.Default); string line; while (!sr.EndOfStream) { line = sr.ReadLine().Trim(); line = Regex.Replace(line, @"/{2}.+", "");// 去掉“//”行 line = Regex.Replace(line, @"{\s*", ""); sq.Enqueue(line); } sr.Close(); sr.Dispose(); string curNameSpace = sq.Dequeue().Remove(0, 8).Replace(";", ""); nClasses = HanldQueue(sq); foreach (KeyValuePair <string, Dictionary <string, string> > fieldStr in nClasses) { if (fieldStr.Key != "") { ProtoToCSharp ptcs = new ProtoToCSharp(curNameSpace, fieldStr.Key, "ProtoItem"); try { ptcs.Create(fieldStr.Value, bCommonClass); } catch (Exception exp) { throw new Exception(exp.ToString() + ", Class" + fieldStr); } } } } if (bCommonClass) { AutoCSharp.Do.Creator.TypeMapper.InitProtoAssembly(); } }); return(true); }
/// <summary> /// Excel -> .cs /// </summary> /// <param name="inFolderPath">输出文件夹名</param> /// <param name="suffixName">文件后缀名</param> /// <param name="inNameSpace">命名空间</param> /// <param name="inHeritNames">继承</param> /// <returns></returns> public bool Excel(string inPath, string inFolderName, string suffixName, string inNameSpace = "", string inHeritNames = "") { Assist.CheckFolderExist(inFolderName); Assist.DeleteFilesInFolder(inFolderName); Dictionary <string, string[]> finalclassname = new Dictionary <string, string[]>(); //Load Cfg XML string cfgPath = Assist.RootPath + "Cfg";; Dictionary <string, XmlDocument> dicXML = Assist.GetXml(cfgPath); string xmlName; XmlNodeList nodeList; Dictionary <string, string> dicFunctions = new Dictionary <string, string>(); foreach (XmlDocument xml in dicXML.Values) { xmlName = xml.DocumentElement.Name; if (xmlName == "Functions") { //保证先Load Functions.xml nodeList = xml.GetElementsByTagName("function"); foreach (XmlNode node in nodeList) { foreach (XmlAttribute attr in node.Attributes) { if (attr.Name == "name") { dicFunctions[attr.Value] = node.InnerText; break; } } } break; } } Dictionary <string, ExcelToCSharp> dicEc = new Dictionary <string, ExcelToCSharp>(); string tableName = ""; string tableDes = ""; string cfgName = "", desName = "", fieldName; ExcelToCSharp e; List <string[]> values; foreach (XmlDocument xml in dicXML.Values) { xmlName = xml.DocumentElement.Name; if (xmlName == "CfgItems") { nodeList = xml.GetElementsByTagName("cfg"); foreach (XmlNode node in nodeList) { foreach (XmlAttribute attr in node.Attributes) { if (attr.Name == "name") { cfgName = attr.Value; } else if (attr.Name == "des") { desName = attr.Value; } } //finalclassname.Add(cfgName, desName); e = new ExcelToCSharp(inHeritNames, "Cfg" + Assist.FirstLetterUp(cfgName), inFolderName, dicFunctions); e.SetInherit(inHeritNames); values = new List <string[]>(); foreach (XmlNode paramNode in node.ChildNodes) { string[] v = new string[4]; foreach (XmlAttribute attr in paramNode.Attributes) { fieldName = attr.Name; if (fieldName == "name") { v[0] = attr.Value; } else if (fieldName == "type") { v[1] = attr.Value; } else if (fieldName == "des") { v[2] = attr.Value; } else if (fieldName == "link") { v[3] = attr.Value; } } values.Add(v); } e.SetValue(cfgName, values); dicEc.Add(cfgName, e); } } } try { Assist.GetObjPaths(suffixName, inPath).ForEach(delegate(string path) { DataTable dt = null; bool bExcel = true; if (suffixName == ".xlsx") { DataSet ds = Assist.ExcelToData(path); dt = ds.Tables[0]; } else if (suffixName == ".txt") { tableDes = path; dt = Assist.TxtToData(path); bExcel = false; } if (dt != null) { // ===================== 类名注释 ======================== string acn = path.Contains("(") ? path.Split('(')[1] : path.Split('(')[1]; string acnn = acn.Contains(")") ? acn.Split(')')[0] : acn.Split(')')[0]; tableDes = acnn; // ======================================================= tableName = Assist.FirstLetterUp(dt.TableName); e = new ExcelToCSharp(inHeritNames, "Cfg" + tableName, inFolderName, dicFunctions); e.SetInherit(inHeritNames); DataRowCollection rows = dt.Rows; values = new List <string[]>(); string note = null; string strFieldName = null; for (int x = 0; x < dt.Columns.Count; x++) { if (rows[2][x].ToString() != "") { string[] v = new string[4]; v[0] = rows[0][x].ToString().Trim(); v[1] = rows[2][x].ToString().Trim(); if (bExcel) { v[2] = rows[1][x].ToString().Trim(); v[3] = rows[3][x].ToString().Trim(); } else { strFieldName = rows[1][x].ToString().Trim(); note = rows[3][x].ToString().Trim(); v[2] = note == "" ? strFieldName : string.Concat(strFieldName, ";", note); v[3] = rows[4][x].ToString().Trim(); } values.Add(v); } } e.SetValue(acnn, values); dicEc.Add(tableName, e); finalclassname.Add(dt.TableName, new string[] { acnn, e.GetKeyType() }); } }); } catch (Exception ex) { throw new Exception(tableDes + ex.Message + "可能是Excel打开表左下角的名字跟其它表重复。"); } foreach (ExcelToCSharp ec in dicEc.Values) { ec.CreateCode(dicEc); } CreatePBData final = new CreatePBData(inHeritNames, "PBData", inFolderName); final.SetValue(finalclassname); return(true); }