static void CheckAllTabFileDataWithLua() { Lua luaVm = new Lua(); DirectoryInfo dir = new DirectoryInfo(Config.Instance.GetParam(Config.SrcTabFilePath)); FileInfo[] files = dir.GetFiles("*.txt", SearchOption.AllDirectories); int filesCount = files.Length; for (int i = 0; i < filesCount; i++) { FileInfo fileInfo = files[i]; bool isInFilter = Config.Instance.IsInDataCheckerFilter(fileInfo.Name); if (isInFilter) { continue; } System.Console.WriteLine("(" + i + "/" + filesCount + ")加载原始表格---->" + fileInfo.Name); FileStream fs = new FileStream(fileInfo.FullName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); StreamReader sr = new StreamReader(fs); string content = sr.ReadToEnd(); sr.Close(); fs.Close(); TabFile tabFile = new TabFile(); string ret = tabFile.Check(content); if (!string.IsNullOrEmpty(ret)) { System.Console.WriteLine(fileInfo.Name + "---->表格存在错误,无法检查!错误:" + ret); return; } LuaFile luaFile = new LuaFile(); luaFile.UnpackFromTabFile(tabFile, true); string fileName = fileInfo.Name.Replace(".txt", ""); string exportContent = luaFile.ExportDataLuaFile(fileName, "Data"); UTF8Encoding utf8Encoding = new UTF8Encoding(); string utf8ExportContent = utf8Encoding.GetString(Encoding.ASCII.GetBytes(exportContent)); luaVm.DoString(utf8ExportContent); } System.Console.WriteLine("加载数据完成"); luaVm.DoFile(System.Environment.CurrentDirectory + "\\CheckList\\checklist.lua"); }
public List <TabFile.Column> GetTabFileColumn(string name, string key) { TabFile tabFile = GetTabFile(name); if (tabFile == null) { return(null); } string columnParent = null; string columnName = null; int index = key.IndexOf('.'); if (index == -1) { columnParent = null; columnName = key; } else { columnParent = key.Substring(0, index); columnName = key.Substring(index + 1); } List <TabFile.Column> ret = new List <TabFile.Column>(); for (int i = 0; i < tabFile.columns.Count; i++) { TabFile.Column column = tabFile.columns[i]; // if (column.head.parent == columnParent && column.head.name == columnName) if (column.head.name == columnName) { ret.Add(column); } } if (ret == null || ret.Count == 0) { System.Console.WriteLine(key + "标识不存在,请检查checklist_" + name); } return(ret); }
public bool UnpackFromTabFile(string fileName, TabFile tabfile) { curTabFile = tabfile; this.fileName = fileName.Substring(0, 1).ToUpper() + fileName.Substring(1); CSStruct curStruct = null; CSListStruct curListSturct = null; for (int i = 0; i < tabfile.columns.Count; i++) { TabFile.Column column = tabfile.columns[i]; if (!column.head.clientExport) { continue; } switch (column.head.type) { case TypeDef.IntType: case TypeDef.BoolType: case TypeDef.FloatType: case TypeDef.StringType: case TypeDef.ListIntType: case TypeDef.ListFloatType: case TypeDef.ListStringType: case TypeDef.LuaTableType: CSVaribles varible = new CSVaribles(); varible.type = column.head.type; varible.name = column.head.name; if (curStruct != null) { if (curStruct.NotContains(varible)) { curStruct.varibles.Add(varible); } } else { varibles.Add(varible); } break; case TypeDef.StructType: if (!string.IsNullOrEmpty(column.head.name)) { if (curStruct != null) { System.Console.WriteLine("struct异常,列:" + (i + 1)); return(false); } if (curListSturct == null) { curStruct = new CSStruct(); curStruct.name = column.head.name; structs.Add(curStruct); } else { if (curListSturct.csStruct == null) { curStruct = new CSStruct(); curStruct.name = curListSturct.name; curListSturct.csStruct = curStruct; } curStruct = curListSturct.csStruct; curListSturct.count++; } } else { if (curStruct == null) { System.Console.WriteLine("struct异常,列:" + (i + 1)); return(false); } if (curListSturct == null) { varible = new CSVaribles(); varible.type = column.head.type; varible.csStruct = curStruct; varibles.Add(varible); } curStruct = null; } break; case TypeDef.ListType: if (!string.IsNullOrEmpty(column.head.name)) { if (curListSturct != null) { System.Console.WriteLine("list异常,列:" + (i + 1)); return(false); } curListSturct = new CSListStruct(); curListSturct.name = column.head.name; structLists.Add(curListSturct); } else { if (curListSturct == null) { System.Console.WriteLine("struct异常,列:" + (i + 1)); return(false); } varible = new CSVaribles(); varible.type = column.head.type; varible.csListStruct = curListSturct; varibles.Add(varible); curListSturct = null; } break; default: System.Console.WriteLine(i + ":不支持的数据类型:" + column.head.type + "," + column.head.name); break; } } return(true); }
static void SingleExport(string filePath) { FileInfo fileInfo = new FileInfo(filePath); FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); byte[] temp = new byte[fs.Length]; fs.Read(temp, 0, (int)fs.Length); StreamReader sr = new StreamReader(fs); string content = GetText(temp); sr.Close(); fs.Close(); TabFile tabFile = new TabFile(); string ret = tabFile.Check(content); if (!string.IsNullOrEmpty(ret)) { System.Console.WriteLine(fileInfo.Name + "---->导表失败!错误:" + ret); return; } List <Config.ExportInfo> exportInfoList = Config.Instance.GetExportInfo(fileInfo.Directory.Name); for (int i = 0; i < exportInfoList.Count; i++) { Config.ExportInfo info = exportInfoList[i]; string fileName = fileInfo.Name.Replace(".txt", ""); string dirName = ""; if (!string.IsNullOrEmpty(info.dirName)) { dirName = "/" + info.dirName; } string exportContent = null; switch (info.type) { case Config.ExportType.CSFile: if (!string.IsNullOrEmpty(info.param)) { fileName = info.param; } CSFile csFile = new CSFile(); csFile.UnpackFromTabFile(fileName, tabFile); string csTemplate = Config.Instance.GetCSTemplate(csFile.fileName); exportContent = csFile.ExportStructCSFile(csTemplate); string csFilePath = Config.Instance.GetParam(Config.OutputCSFilePath) + dirName + "/" + csFile.fileName + ".cs"; SaveFile(csFilePath, exportContent, Encoding.UTF8); break; case Config.ExportType.DataTabFile: exportContent = tabFile.ExportDataTabFile(); string tabFilePath = Config.Instance.GetParam(Config.OutputTabFilePath) + dirName + "/" + fileName + ".txt"; SaveFile(tabFilePath, exportContent, Encoding.UTF8); break; case Config.ExportType.Lua: string moduleName = null; if (!string.IsNullOrEmpty(info.param)) { moduleName = info.param; } LuaFile luaFile = new LuaFile(); luaFile.UnpackFromTabFile(tabFile); exportContent = luaFile.ExportDataLuaFile(fileName, moduleName); string luaFilePath = Config.Instance.GetParam(Config.OutputLuaFilePath) + dirName + "/" + fileName + ".lua"; SaveFile(luaFilePath, exportContent, Encoding.UTF8); break; } } System.Console.WriteLine(fileInfo.Name + "---->导表完成!"); }
public bool UnpackFromTabFile(TabFile tabfile, bool forceAll = false) { List <LuaStruct> structs = new List <LuaStruct>(); for (int i = 0; i < tabfile.columns[0].data.Count; i++) { StringBuilder line = new StringBuilder(); lines.Add(line); LuaStruct structTmp = new LuaStruct(); structs.Add(structTmp); } bool isInList = false; for (int i = 0; i < tabfile.columns.Count; i++) { TabFile.Column column = tabfile.columns[i]; for (int j = 0; j < column.data.Count; j++) { StringBuilder line = lines[j]; LuaStruct structTmp = structs[j]; string data = column.data[j]; if (i == 0) { line.Append("[" + data + "] = {"); } if (column.head.serverExport || forceAll) { switch (column.head.type) { case TypeDef.IntType: int intData = 0; int.TryParse(data, out intData); if (!isInList) { line.Append(column.head.name + "=" + intData + ","); } else { if (intData != 0) { structTmp.hasData = true; } structTmp.str.Append(column.head.name + "=" + intData + ","); } break; case TypeDef.BoolType: string str = data.ToLower(); bool boolData = false; if (!string.IsNullOrEmpty(str) && str != "0" && str != "false") { boolData = true; } string boolStr = boolData.ToString().ToLower(); if (!isInList) { line.Append(column.head.name + "=" + boolStr + ","); } else { if (boolData) { structTmp.hasData = true; } structTmp.str.Append(column.head.name + "=" + boolStr + ","); } break; case TypeDef.FloatType: float floatData = 0; float.TryParse(data, out floatData); string floatStr = string.Format("{0}", floatData); if (!isInList) { line.Append(column.head.name + "=" + floatStr + ","); } else { if (floatData != 0) { structTmp.hasData = true; } structTmp.str.Append(column.head.name + "=" + floatStr + ","); } break; case TypeDef.StringType: if (!string.IsNullOrEmpty(data)) { string strData = data.TrimStart('"'); strData = strData.TrimEnd('"'); strData = strData.Replace("\\", "\\\\"); strData = strData.Replace("\"", "\\\""); if (!isInList) { line.Append(column.head.name + "=\"" + strData + "\","); } else { structTmp.hasData = true; structTmp.str.Append(column.head.name + "=\"" + strData + "\","); } } break; case TypeDef.ListIntType: case TypeDef.ListFloatType: string strData2 = data.TrimStart('"'); strData2 = strData2.TrimEnd('"'); if (!isInList) { line.Append(column.head.name + "={" + strData2 + "},"); } else { if (!string.IsNullOrEmpty(data)) { structTmp.hasData = true; structTmp.str.Append(column.head.name + "={" + strData2 + "},"); } } break; case TypeDef.ListStringType: if (!string.IsNullOrEmpty(data)) { string strData = data.TrimStart('"'); strData = strData.TrimEnd('"'); string[] param = strData.Split(','); string strDataResult = ""; for (int k = 0; k < param.Length; k++) { strDataResult += "\"" + param[k] + "\""; if (k != param.Length - 1) { strDataResult += ","; } } if (!isInList) { line.Append(column.head.name + "={" + strDataResult + "},"); } else { structTmp.hasData = true; structTmp.str.Append(column.head.name + "={" + strDataResult + "},"); } } break; case TypeDef.StructType: if (!string.IsNullOrEmpty(column.head.name)) { structTmp.str = new StringBuilder(); structTmp.hasData = false; if (isInList) { structTmp.str.Append("{"); } else { line.Append(column.head.name + "={"); } } else { if (isInList) { structTmp.str.Replace(",", "", structTmp.str.Length - 1, 1); structTmp.str.Append("},"); if (structTmp.hasData) { line.Append(structTmp.str.ToString()); } } else { line.Replace(",", "", line.Length - 1, 1); line.Append("},"); } } break; case TypeDef.ListType: if (!string.IsNullOrEmpty(column.head.name)) { line.Append(column.head.name + "={"); isInList = true; } else { line.Replace(",", "", line.Length - 1, 1); line.Append("},"); isInList = false; } break; case TypeDef.LuaTableType: if (!string.IsNullOrEmpty(data)) { string strData = data.TrimStart('"'); strData = strData.TrimEnd('"'); if (!isInList) { line.Append(column.head.name + "=" + strData + ","); } else { structTmp.hasData = true; structTmp.str.Append(column.head.name + "=" + strData + ","); } } break; } } if (i == tabfile.columns.Count - 1) { line.Replace(",", "", line.Length - 1, 1); line.Append("},"); } } } return(true); }