当前位置: 首页 > news >正文

unity3d读取csv文件

1、创建csv文件

既然做实验嘛,没有资源怎么行,自己徒手写个csv文件吧,打开Numbers工具,新建一个表格文件,我的文件编辑截图如下:


创建完成后,导出成csv格式,我这里文件名为test.csv;


2、改成txt格式

既然unity3d不认识csv,那么我们人工处理一下,很简单,像上一篇文章一样,简单粗暴的把csv的扩展名改成txt吧,谁让unity3d比较亲txt呢,更改后是test.txt,打开后是这个样子的:


3、读取txt文件

上代码:

[csharp]  view plain copy
  1. private string [][]Array;  
  2. void Start ()  
  3. {  
  4.     //读取csv二进制文件  
  5.     TextAsset binAsset = Resources.Load ("test"typeof(TextAsset)) as TextAsset;         
  6.           
  7.     //读取每一行的内容  
  8.     string [] lineArray = binAsset.text.Split ("\r"[0]);  
  9.           
  10.     //创建二维数组  
  11.     Array = new string [lineArray.Length][];  
  12.           
  13.     //把csv中的数据储存在二位数组中  
  14.     for(int i =0;i < lineArray.Length; i++)  
  15.     {  
  16.         Array[i] = lineArray[i].Split (',');  
  17.     }  
  18. }  
先读取test文件,这里要注意,你要把test文件放到Asset的Resources目录下,没有这个目录就自己创建一个。因为每一行结尾都会有个“\r”,所以用这个可以分隔出每行数据,然后我们创建一个二维数组Array,行数用上一句求出的行数据,列数待定。因为每一行的数据都是用“,”分隔符分开的,所以我们用逗号分隔出每列数据,再以行为单位保存在Array中。现在你打印Array.Length应该是5,表示行数,Array[0].Length应该是3,表示列数。


4、以行列数读取数据

[csharp]  view plain copy
  1. string GetDataByRowAndCol(int nRow, int nCol)  
  2. {  
  3.     if (Array.Length <= 0 || nRow >= Array.Length)  
  4.         return "";  
  5.     if (nCol >= Array[0].Length)  
  6.         return "";  
  7.           
  8.     return Array[nRow][nCol];  
  9. }  
这个代码很简单,前面都是行列越界判断,没啥好说的,这时打印GetDataByRowAndCol(1,2)应该是“这是苹果”。

5、以Id和名称读取数据

这应该是项目最常用到的,以行列的名称定位数据。

[csharp]  view plain copy
  1. string GetDataByIdAndName(int nId, string strName)  
  2. {  
  3.     if (Array.Length <= 0)  
  4.         return "";  
  5.           
  6.     int nRow = Array.Length;  
  7.     int nCol = Array[0].Length;       
  8.     for (int i = 1; i < nRow; ++i) {  
  9.         string strId = string.Format("\n{0}", nId);  
  10.         if (Array[i][0] == strId) {  
  11.             for (int j = 0; j < nCol; ++j) {  
  12.                 if (Array[0][j] == strName) {  
  13.                     return Array[i][j];  
  14.                 }  
  15.             }  
  16.         }  
  17.     }  
  18.           
  19.     return "";  
  20. }  
上面代码也很简单,先循环行数据,判断ID是否相同,找到ID后再循环列数据,看名称是否相同,然后返回行列对应的数据。这里有一点值得注意,就是判断Id的时候,id前面会有个“\n”,这是换行标识符,你可以用Debug的方式看一下Array,除了第一行,每一行的Id都会有个“\n”的前缀,所以必须这么判断。这时打印GetDataByIdAndName(4,"name")应该是“梨”。

相关文章:

  • unity3D 自定义显示中文
  • Eclipse中将class。Java打包成Jar
  • Java Web实习笔记
  • JAVA中indexOf函数用法和subString()方法
  • MyEclipse+Tomcat + Servlet开发
  • Servlet学习
  • JAVA中Iterator的具体作用?
  • 实习日志(3)
  • FileItem类
  • JSP中EL表达式语言不能使用的解决方法
  • myeclipse中文乱码,JSP页面乱码
  • Tomcat中文乱码问题的原理和解决方法
  • java的web.xml中出现ERROR:Editor model does not support child element taglib of web
  • quote symbol expected异常
  • JAVA操作properties文件
  • android百种动画侧滑库、步骤视图、TextView效果、社交、搜房、K线图等源码
  • CSS相对定位
  • go语言学习初探(一)
  • HTML-表单
  • js数组之filter
  • scrapy学习之路4(itemloder的使用)
  • Swoft 源码剖析 - 代码自动更新机制
  • Vue2.0 实现互斥
  • 力扣(LeetCode)357
  • 面试总结JavaScript篇
  • 如何设计一个微型分布式架构?
  • 使用 Docker 部署 Spring Boot项目
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 异步
  • AI算硅基生命吗,为什么?
  • kubernetes资源对象--ingress
  • linux 淘宝开源监控工具tsar
  • 树莓派用上kodexplorer也能玩成私有网盘
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​LeetCode解法汇总518. 零钱兑换 II
  • (Redis使用系列) Springboot 使用Redis+Session实现Session共享 ,简单的单点登录 五
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (定时器/计数器)中断系统(详解与使用)
  • (独孤九剑)--文件系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (六)c52学习之旅-独立按键
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)shell调试方法
  • (转载)CentOS查看系统信息|CentOS查看命令
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET Core 成都线下面基会拉开序幕
  • .net core 调用c dll_用C++生成一个简单的DLL文件VS2008
  • .NET框架类在ASP.NET中的使用(2) ——QA
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .pub是什么文件_Rust 模块和文件 - 「译」
  • [ IOS ] iOS-控制器View的创建和生命周期
  • [acm算法学习] 后缀数组SA