private static void GenerateUI(string configPath, string spriteFolderPath, Canvas canvas) { CsvTable table = null; pos_readdoc : if (File.Exists(configPath)) { try { table = CsvHelper.ReadCSV(configPath, System.Text.Encoding.GetEncoding("GB2312")); } catch (Exception e) { var reopen = EditorUtility.DisplayDialog("提示", e.Message, "重试", "取消"); if (reopen) { goto pos_readdoc; } } if (table != null) { var canLoad = table.IsUIInfoTable(false); if (canLoad) { var isTitleMatch = table.IsUIInfoTable(true); if (!isTitleMatch) { var forceLoad = Notice("文档标题不匹配:" + string.Join(",", UIInfo_TableExtend.uiInfoHead) + "\n继续请按确认!", true); if (!forceLoad) { return; } } var uiInfo = table.LoadUIInfo(); if (uiInfo != null) { if (emptyImporter != null) { Assembler.emptyImporter = emptyImporter; } Assembler.GenerateUI(spriteFolderPath, canvas, layerImportTypes, uiInfo); } } else { Notice("配制文档不可用,请核对后重试!"); } } } }
public static UIInfo LoadUIInfo(this CsvTable table) { if (table.IsUIInfoTable(false)) { var uiInfo = new UIInfo(table.name); if (table.Rows != null && table.Columns != null) { for (int i = 0; i < table.Rows.Count; i++) { var layerInfo = new LayerInfo(); layerInfo.name = table[0, i]; layerInfo.path = table[1, i]; layerInfo.type = table[2, i]; layerInfo.rect = ParamAnalysisTool.StringToRect(table[3, i]); var resourceDic = ParamAnalysisTool.ToDictionary(table[4, i]); if (resourceDic != null) { ChargeDic(layerInfo.resourceDic, resourceDic); } if (table.Columns.Count > 5) { List <ResourceDic> sub_images; List <ResourceDic> sub_texts; List <ResourceDic> sub_rawImages; var subResourceDic = ParamAnalysisTool.ToDictionary_Sub(table[5, i], out sub_images, out sub_texts, out sub_rawImages); if (subResourceDic != null) { ChargeDic(layerInfo.subResourceDic, subResourceDic); } ChargeList(layerInfo.sub_images, sub_images); ChargeList(layerInfo.sub_texts, sub_texts); ChargeList(layerInfo.sub_rawImages, sub_rawImages); } uiInfo.layers.Add(layerInfo); } } return(uiInfo); } return(null); }
public static CsvTable UIInfoToTable(this UIInfo info) { var table = new CsvTable(info.name); table.Columns = new List <string>(uiInfoHead); for (int i = 0; i < info.layers.Count; i++) { var layer = info.layers[i]; var raw = new string[table.Columns.Count]; raw[0] = layer.name; raw[1] = layer.path; raw[2] = layer.type; raw[3] = ParamAnalysisTool.RectToString(layer.rect); raw[4] = ParamAnalysisTool.FromDictionary(layer.resourceDic); raw[5] = ParamAnalysisTool.FromDictionarySub(layer.subResourceDic, layer.sub_images, layer.sub_texts, layer.sub_rawImages); table.Rows.Add(raw); } return(table); }
public static bool IsUIInfoTable(this CsvTable table, bool compireHead = true) { if (table == null || table.Columns == null || table.Columns.Count > uiInfoHead.Length) { return(false); } if (compireHead) { for (int i = 0; i < uiInfoHead.Length; i++) { if (table.Columns.Count > i && uiInfoHead[i] != table.Columns[i]) { return(false); } } } return(true); }
/// <summary> /// 将DataTable中数据写入到CSV文件中 /// </summary> /// <param name="dt">提供保存数据的DataTable</param> /// <param name="fileName">CSV的文件路径</param> public static void SaveCSV(CsvTable dt, string fullPath, System.Text.Encoding encoding) { FileInfo fi = new FileInfo(fullPath); if (!fi.Directory.Exists) { fi.Directory.Create(); } FileStream fs = new FileStream(fullPath, System.IO.FileMode.Create, System.IO.FileAccess.Write); StreamWriter sw = new StreamWriter(fs, encoding); string data = ""; //写出列名称 for (int i = 0; i < dt.Columns.Count; i++) { data += "\"" + dt.Columns[i] + "\""; if (i < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); //写出各行数据 for (int i = 0; i < dt.Rows.Count; i++) { data = ""; for (int j = 0; j < dt.Columns.Count; j++) { string str = dt.Rows[i][j].ToString(); str = string.Format("\"{0}\"", str); data += str; if (j < dt.Columns.Count - 1) { data += ","; } } sw.WriteLine(data); } sw.Close(); fs.Close(); }
/// <summary> /// 读取CSV文件到DataTable中 /// </summary> /// <param name="filePath">CSV的文件路径</param> /// <returns></returns> public static CsvTable ReadCSV(string filePath, System.Text.Encoding encoding) { CsvTable dt = new CsvTable(System.IO.Path.GetFileNameWithoutExtension(filePath)); var fileInfo = new FileInfo(filePath); var fileStream = fileInfo.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite); int lineNumber = 0; using (CsvFileReader reader = new CsvFileReader(fileStream, encoding)) { var row = new List <string>(); while (reader.ReadRow(row)) { if (0 == lineNumber) { foreach (string s in row) { dt.Columns.Add(s.Replace("\"", "")); } } else { int index = 0; string[] dr = CsvTable.NewRow(row.Count); foreach (string s in row) { dr[index] = s.Replace("\"", ""); index++; } dt.Rows.Add(dr); } lineNumber++; } } fileStream.Dispose(); fileStream.Close(); return(dt); }
public static void LoadFromCsvTable(this TextureInfoTable infoTable, CsvTable table) { var columsCount = table.Columns.Count; if (columsCount >= 3) { if (table.Rows != null && table.Columns != null) { if (infoTable.textureInfos == null) { infoTable.textureInfos = new List <TextureInfo>(); } else { infoTable.textureInfos.Clear(); } for (int i = 0; i < table.Rows.Count; i++) { var textureInfo = new TextureInfo(); textureInfo.texturePath = table[0, i]; textureInfo.type = (TextureImporterType)System.Enum.Parse(typeof(TextureImporterType), table[1, i]); textureInfo.resourceDic = ParamAnalysisTool.ToDictionary(table[2, i]); if (columsCount > 3) { textureInfo.spritesheetList = ParamAnalysisTool.ToDictionaryArray(table[3, i]); } infoTable.textureInfos.Add(textureInfo); } } } else { Debug.LogError("csv文档参数不足3个,请检查"); } }