hello各位,我又回来了~
上次发布工具后,得到了一些反馈,所以这几天给工具做了下升级~
老版本地址
http://www.xuanyusong.com/archives/3940
本次更新的内容有:
1.json添加精简格式,减小文件容量
2.支持二进制导出格式
3.添加联合主键功能
4.添加批注功能,可设置字典的默认key集合,并根据集合批量初始化单元格
5.添加plist和oc导出格式
现在做事情B格要高,才会受关注,所以我给工具起了个霸气的名字——滤查表。赞同我的请回复666~XD
下面介绍一下新功能:
json格式分为易读和精简两个版本,可通过bat中的第三个命令行参数控制,该参数可缺省,默认为0,此时为易读模式,若大于0,则导出精简模式,例:
导出后就是这个样子了
二进制格式应该不用过多解释吧,很常用的存储方式,读取效率高,占用空间少,唯一的缺点就是可读性差,不好调试。我在工具中写了lua、java和C#三种语言的解析接口,都放在bin目录中,可根据需要自行放到工程中。
解析后,java会返回一个ArrayList或者HashMap(根据主键设置),lua会返回一个Table,数据格式基本没有变化,只是java没有声明新的类,全部都存在哈希表中。通过读取二进制获得的数据,在使用上会比老方法变扭些,因为看不到数据(不过有打印接口,可以动态查看),可能会频繁查看excel表,但胜在运行效率高,如何取舍就看各位的喜好了~
最后说说很多人(包括松松)跟我提到的联合主键,因为我之前使用数据库不是很多,所以在工作中没接触过联合主键,但听他们的描述后,觉得还是个非常给力的功能,所以决定吸纳到滤查表中XD
所谓联合主键,就是可以通过某行数据的其中几个字段,定位到该行,从而获取其全部数据,相当于几个联合主键凑在一起,就可以起到主键的索引作用,这几个字段的表头就是该表的联合主键。
上图中的name和className就是该表的联合主键,如果你在程序中获得了Leonard和classHuman两个参数,就可以通过联合索引直接取到该行的数据(java是对象,lua是Table),作用和主键是一样的,时间复杂度也是O(1)。至于联合查找的接口:java和lua格式导出后会自动生成,通过unionGet(java)和表名+Get(lua)方法可取到索引结果,参数就是所有联合主键的对应值。二进制也会自动生成联合主键,但是没有公共的索引接口,需要用户在unionTable中通过手动生成的联合键查找,生成规则为所有主键以字符串形式拼接,中间以下划线分割,例如上图中的联合键就是:Leonard_classHuman。至于unionTable,是在解析二进制文件后生成的,会保存在DBBinary.s_unionTable中。json格式我没有写解析方法,主要是因为json的原生支持语言是js,而我不会写js代码,所以就没做,至于其它语言,可以从它们各自生成的解析代码中拷贝。
设置方法:选中要设为联合主键的列,见下图
下图中红框区内的按钮就是联合主键操作键,set是将所选列设为联合主键,del则是取消
代码中的索引函数
lua联合索引方法
java联合索引方法
二进制在java中的应用范例
二进制在lua中的应用范例
再有就是我写的二进制读取方法只是针对滤查表的,其实从设计角度讲,应该是先写出基础的二进制读取,再在上层针对具体需求进行封装,但是我觉得自己写的方法并不是很完美,加上很多语言都有读取二进制的API,所以就没敢越俎代庖~有雄心壮志的同学可以自己封装一下~
小齐童鞋之前提到一个问题,就是策划手动填写字典的key值容易出错,因此我加了一个批量生成字典单元格的功能,使用方法如下:
假如我们有一列单元格,类型为字典,并且所有行的key都是min和max(固定的),那么我们给该列的类型单元格添加批注,内容就是“min;max”,见下图
然后确保该列的单元格都为空(有内容的单元格不会有效果),点击InitDictCells按钮,此时该列的所有单元格就都被初始化为“min=0;max=0”了,策划只需将0改为真实值即可,这样便大大降低了出错几率。此外可通过点击ShowComment按钮显示所有的批注,虽然Alt+R+A也有类似功能,但它是显示全部的批注,而ShowComment只显示第二行(类型行)的批注。最后感谢小齐的建议哈~
再次点击ShowComment就会隐藏批注。
滤查表下载地址
http://pan.baidu.com/s/1eSvzgaQ
全部文件
- 本文固定链接: https://www.xuanyusong.com/archives/3971
- 转载请注明: 失落的宇宙 于 雨松MOMO程序研究院 发表
能否增加对中文的支持呢?或者给出源码 我自己修改也可以的工具真的很好用 帮了大忙了 谢谢
导出为protobuf的bin可以更小。
能给个package范例吗
你指的是DataConverter.exe的源码吗?
不是 我自己用的时候每次读取二进制文件都会出错 所以想大大发个可用的例子看看有什么区别
这个东西很强大啊,有两个问题希望能修复一下:1.中文乱码问题,毕竟中文数据太常见了。2.数据读取问题,例如将例子的第一个表导出c#,读取数据就是openFile(“Template_Player.bin”);,显然这个路径是不能直接用的,建议改为path XXX.bin,增加一个变量
这个东西很强大啊,有两个问题希望能修复一下:1.中文乱码问题,毕竟中文数据太常见了。2.数据读取问题,例如将例子的第一个表导出c#,读取数据就是openFile(“Template_Player.bin”);,显然这个路径是不能直接用的,建议改为path+XXX.bin,增加一个变量
1.其实导出中文并不是excel的职责,仔细想一下就会明白,为了应用能够支持多语言,但凡开发流程正规的公司都是不允许在代码中直接出现中文的,都是给出key,再到其它地方去索引文字,因此excel其实是没有必要导出中文的……不过为了使它的应用范围更广,有时间我可以修正一下~ 2.你在前面加个常量就行了,当时图省事就没有写,等闲下来我改一下
能给DataConverter.exe的源码,想做一些调整修改
“都是给出key,再到其它地方去索引文字”其他地方是哪里呀?因为我觉得多语言不是也得用配置表工具吗,但现在这个工具不支持中文。是不是还有其他方法,可否点拨一下
感谢你的建议~
链接失效啦[bobo不要啊]
像这个格式的要怎么做:
[“item”] = { refId = “item”, property = { name = “草”, description = “采集物”, iconId = “item”, smallIconId = “item”, quality = 1, bindType = 1, itemSortId = 100, itemType = 3, canUse = 0, canBatchUse = 0, maxStackNumber = 9, isNonPropertyItem = 0, isCanSale = 1, salePrice = 10, saleCurrency = 1, isNonThrow = 1, useLevel = 1, useKnight = 0, useCountEveryday = 0, itemCDGroup = -1,},
effectData = “”, useItemClosure = “”, putItemClosure = “putItemClosure”,},
像这个格式的要怎么做:
[“item”] = { refId = “item”, property = { name = “草”, description = “采集物”, iconId = “item”, smallIconId = “item”, quality = 1, bindType = 1, itemSortId = 100, itemType = 3, canUse = 0, canBatchUse = 0, maxStackNumber = 9, isNonPropertyItem = 0, isCanSale = 1, salePrice = 10, saleCurrency = 1, isNonThrow = 1, useLevel = 1, useKnight = 0, useCountEveryday = 0, itemCDGroup = -1,},
effectData = “”, useItemClosure = “”, putItemClosure = “putItemClosure”,},
你好,感谢你的支持,但是你描述中的property是多类型的复合字典,本工具目前之支持单一类型的字典,你可以把property抽象成一个类,为它新建一个表,然后在本表中建一个字段,通过数据有效性指向新建的表
或者把property里的字段提出来,减少一个层级也可以,因为我看里面的参数都是固定字段,不会有太大变数,个人感觉没必要做成一个集合[呵呵]
中文转出到LUA乱码,我选的类型为string
抱歉,本工具不支持中文……
给力
已添加plist和oc导出功能
[good]
wa
已更新,添加了C#格式,字典批量初始化功能(感谢小齐的建议),带有主键的表格导出json时,如主键是int类型,会自动转为string
凯哥给力啊。。。
字段批量初始化功能是直接生成字典序列化文件,然后在unity中反序列化后直接使用?
额,没太明白你的意思,批量初始化其实就是先定义好一套模版(字典里有哪些key),之后根据模版自动给单元格赋初值(key1=0,key2=0……),后面的用法和原来是一样的~
是这个意思来着!
雨松大大,请问如果要把Unity程序中的调查问卷的数据导出为Excel图表又该如何做呢?我最近要做一个Unity3d的互动系统,这个系统是运行在一体机上面的,也就是说没有键盘外设,其中有一个调查问卷,需要用户输入姓名和电话。1.我该如何调用系统的触摸键盘以及输入法?2.如何将调查问卷的数据保存下来?我是U3D新手,现在没有太好的思路,希望大大不吝赐教!
epplus 这个库 可以读 写excel
大大,可以做个插件吗?或者告诉我详细怎么做,小白对库这些东西完全是很茫然!拜托了!软键盘的那个问题我找到插件了!
抱歉昨天上传的版本有点问题,在lua中读取二进制会报错,我已重新上传,麻烦已经下载过的朋友再重新下载一遍,sorry……
[赞]
我一直在设想做个这样的插件,在UNITY里编辑,不需要开其他的编辑工具。策划程序查询数据和修改保存成数据都在UNITY下,编辑的结果会直接体现到游戏里,但是别人和我说这样太耦合了,等于强制了策划必须去使用UNITY,我想想也有道理,所以暂时还是用第三方的工具编辑数据,然后导出成2进制数据在UNITY里解析。
绿茶婊- -[威武]
[赞]
[good]