Unity热更新方案C#Like(二十)-详解KissCSV:一个简易实用的CSV表格读取方式

本文介绍了C#Like在Unity中的热更应用,重点讲解了如何使用KissCSV库高效读取RFC4180规范的CSV文件,包括文件加载、数据解析和索引获取方法,以及KissCSV的使用示例和常见问题解答。
摘要由CSDN通过智能技术生成

C#Like是Unity的热更方案,使用纯C#语言写出可以热更新的代码,就像可以在所有平台使用DLL(动态链接库)文件一样.遵从KISS设计原则,让用户轻松构建或升级成Unity的热更新项目.

简介

本篇主要介绍最简单易用读取符合RFC 4180规范的CSV(Comma-Separated Values)的读取器KissCSV. 本C#库也已经发布在GitHub上供大家免费使用的. 主打精简实用.

用法:

例如我们要读取TestCsv.csv这个文件,该文件以id这列为唯一索引,文件里面内容为

id,number,name,testInts,testStrings,testFloats,testStringIntDicts,testIntBooleanDicts  
1,5,"test name",1|2,"aa|bb",88.8,"ab_2|cd_4",5_true|6_false  
101,6,name2,,,,, 
 步骤1: 为每行数据定义一个类. 注意属性名字要和表头的名字完全一致(区分大小写):
public class TestCsv  
{  
    public int id;  
    public int number;  
    public string name;  
    public List<int> testInts;  
    public List<string> testStrings;  
    public List<float> testFloats;  
    public Dictionary<string, int> testStringIntDicts;  
    public Dictionary<int, bool> testIntBooleanDicts;  
}  
步骤2: 加载如内存中. 只需要调用1次, 如果你需要重新加载文件, 请再次调用:
KissCSV.Load(typeof(TestCsv), "TestCsv.csv", "id");  
步骤3: 根据索引获取整行数据到一个类对象:
TestCsv csv = KissCSV.Get("TestCsv.csv", "1") as TestCsv;  
if (csv != null)//如果"id"这列不存在"1"这个数据会返回null  
{  
    Console.WriteLine($"id={csv.id}");//输出 id=1  
    Console.WriteLine($"name={csv.name}");//输出 name=test name  
    string strPrint = "testStrings=";  
    foreach(var one in csv.testInts)  
        strPrint += one + ",";  
    Console.WriteLine(strPrint);//输出 testStrings=aa,bb  
    strPrint = "testStringIntDicts=";  
    foreach(var one in csv.testStringIntDicts)  
        strPrint += "{" + one.Key + "," + one.Value + "},";  
    Console.WriteLine(strPrint);//输出 testStringIntDicts={ab,2},{cd,4}  
}  

常见问题:

 如果我的文件唯一索引不是只有1个,怎么办?例如上面的TestCsv里的id和number组成唯一索引.
//我们支持最多4列组成的唯一索引  
KissCSV.Load(typeof(TestCsv), "TestCsv.csv", "id", null, "number");  
TestCsv csv = KissCSV.Get("TestCsv.csv", "1", "5") as TestCsv;
为什么不采用KissCSV<TestCsv>.Load("TestCsv.csv", "id");这种看起来更简洁的方式?而且获取的时候还得强转一次.
//C#Like的热更脚本不支持,为了兼容,统一使用传入typeof(TestCsv)方式
我不想新定义一个类,能否直接读取CSV里的数据?
//可以使用SimpleKissCSV来读取  
SimpleKissCSV.Load("TestCsv.csv", "id");  
SimpleKissCSV.GetInt("TestCsv.csv", "1", "number"));  
SimpleKissCSV.GetString("TestCsv.csv", "1", "name")); 
 每列数据的类支持哪些类型的数据?
// 已支持的类型如下:  
// 内置类型:string sbyte ushort uint ulong byte short int long bool float double DateTime  
// List<内置类型>  
// Dictionary<string, 内置类型>  
// Dictionary<int, 内置类型>  
每列数据的类里属性为List和Dictionary的怎么分割的?
//List以'|'分割, 例如1|2分割成{1,2}  
//Dictionary以'|'分割,然后再以'_'分割, 例如"ab_2|cd_4"分割成{{"ab",2},{"cd",4}}  
每列数据的类,我是否能够新增自定义类型
//请自行修改KissCSV.GetValue这个函数 
 "TestCsv.csv"这个文件放在哪里文件夹内?
// 在.\CSV\或.\目录内
  我可否自行读取"TestCsv.csv"这个文件?
//你可以自行读取文件,然后传入参数,例如  
KissCSV.Load(typeof(TestCsv), "TestCsv.csv", "id", File.ReadAllText("./CSV/TestCsv.csv")); 

 本系列文章导读:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C#Like

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值