diff --git a/README.md b/README.md index 21bdcff..ecf5c04 100644 --- a/README.md +++ b/README.md @@ -2,11 +2,15 @@ 通用CSV/Excel打表工具 #### 前言 -目前项目中用的csv转json工具,会带来严重的gc性能问题,例如启动加载慢,影响帧率等问题,转成的json数据,我们需要手动写对应的解析模板代码,所以针对以上问题,本通用打表工具应运而生,用二进制数据替代json数据会比较好的解决性能问题,而且能够自动生成对应的模板代码,节省了写重复代码的时间,而且二进制数据比json文件大小更小。 +目前项目中用的csv转json工具,会带来严重的gc性能问题,例如启动加载慢,影响帧率等问题,转成的json数据,我们需要手动写对应的解析模板代码,所以针对以上问题,本通用打表工具应运而生,用二进制数据替代json数据会比较好的解决性能问题,而且能够自动生成对应的模板代码,节省了写重复代码的时间,而且二进制数据比json读取速度更快,文件大小更小。 + +#### 说明 +因为csv有默认的逗号,这跟表中内容配置逗号会有冲突,不利于解析,所有产生了加强版的ExcelTool,读取路径下的csv和excel表格,如果是csv的这先转换成xlsx的excel,然后统一对excel进行数据读取解析操作,生成完之后再把csv生成的excel删掉,确保目录保持原样,所以ExcelTool是CsvTool的升级版 #### 功能 -* 支持csv和Excel打表导出模板和数据 -* 生成对应的数据模板代码&字段注释 +* 支持csv和Excel的打表 +* 生成对应的数据模板代码 +* 支持生成模板代码字段注释 * 生成二进制文件 * 自动将文件拷贝到对应的工程目录 * 二进制数据读取 @@ -23,7 +27,7 @@ ![](img/2.jpg) 相比较json,二进制文件大小只有其1/4 -##### 生成的自动化模板代码 +##### 自动生成的模板代码 ``` /* * auto generated by tools(注意:千万不要手动修改本文件) @@ -32,6 +36,8 @@ using System; using System.IO; using System.Collections.Generic; +using System.Text; +using System.Linq; [Serializable] public class avatarguideTest : IBinarySerializable @@ -118,10 +124,30 @@ public class avatarguideTest : IBinarySerializable } } } + public override string ToString() + { + var str = $"Id:{Id} Gender:{gender} age:{age} bValue:{bValue} "; + if (vector != null) + { + str += $"vector:[{vector[0]},{vector[1]},{vector[2]}] "; + } + if (Grid != null) + { + str += "Grid:["; + for (int i = 0; i < Grid.Count; i++) + { + str += $"[{Grid[i][0]},{Grid[i][1]},{Grid[i][2]}]"; + if (i < Grid.Count - 1) + str += ","; + } + str += "]"; + } + return str; + } } [Serializable] -public class avatarguideTestList : IBinarySerializable +public partial class avatarguideTestConfig : IBinarySerializable { public List avatarguideTestInfos = new List(); public void DeSerialize(BinaryReader reader) @@ -143,9 +169,25 @@ public class avatarguideTestList : IBinarySerializable avatarguideTestInfos[i].Serialize(writer); } } + + public IEnumerable QueryById(int id) + { + var datas = from d in avatarguideTestInfos + where d.Id == id + select d; + return datas; + } + + public override string ToString() + { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < avatarguideTestInfos.Count; i++) + { + sb.Append($"{avatarguideTestInfos[i].ToString()}\n"); + } + return sb.ToString(); + } } - - ``` #### 使用案例 @@ -162,7 +204,40 @@ else ConsoleHelper.WriteErrorLine("读取失败"); } ``` -![](img/3.jpg) +![f72a068ec36233ddf1e97f9e401c0ce8_890x514.png@900-0-90-f.png](http://image.huawei.com/tiny-lts/v1/images/f72a068ec36233ddf1e97f9e401c0ce8_890x514.png@900-0-90-f.png) + +##### Unity解析二进制 +将二进制文件(后缀必须是.bytes)放在Resources目录,然后通过Resources.Load接口加载 +``` +var bytes = Resources.Load("avatarguideTest"); +if (bytes == null) +{ + return; +} +IBinarySerializable newavList = new avatarguideTestConfig(); +var readOK = FileManager.ReadBinaryDataFromBytes(bytes.bytes, ref newavList); +if (readOK) +{ + Debug.Log(newavList.ToString()); + + //根据Id查询数据 + //var avatarguideTest = (avatarguideTestConfig)newavList; + //var obj = avatarguideTest.QueryById(2); + //if (obj != null && obj.Count() > 0) + // Debug.Log(obj.FirstOrDefault().ToString()); +} +else +{ + Debug.LogError("数据读取错误"); +} +``` +##### 查询数据 +``` +var avatarguideTest = (avatarguideTestConfig)newavList; +var obj = avatarguideTest.QueryById(2); +if (obj != null && obj.Count() > 0) + ConsoleHelper.WriteInfoLine(obj.FirstOrDefault().ToString()); +``` #### 自动化拷贝批处理 ``` @@ -179,9 +254,10 @@ echo "拷贝完成" pause ``` -如果想要执行当前目录下的某个文件夹 可以cd xxx,如果需要深度拷贝,可以for /r %%i in (*.dat) do() +#### 扩展类方法 +上面的config类采用的是partical class 就是为了方便扩展自定义的方法,如果想要添加自定义方法也定义一个partical class文件作为扩展即可 -#### 带扩展的功能 +#### 待扩展的功能 目前还不是最理想的状态,还有很多可以扩展完善的功能,如下: * 支持生成各种类型的文件,例如json、xml、proto等 @@ -189,3 +265,6 @@ pause * 支持Excel数据配置规范性检测,例如手误配置不符合规范导致加载异常,例如大小写逗号(肉眼容易忽略),或者空格等等 * 支持Excel字段客户端服务器可选项 * 支持更多自定义数据类型扩展 + +#### 代码 +https://github.com/dingxiaowei/ExcelTool 喜欢麻烦点个star吧 \ No newline at end of file