zoukankan      html  css  js  c++  java
  • 【Unity3D】Unity中用C#读取CSV文件

    1、创建csv文件

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

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

    2、改成txt格式

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

    3、读取txt文件

    private string [][]Array;  
    void Start ()  
    {  
        //读取csv二进制文件  
        TextAsset binAsset = Resources.Load ("test", typeof(TextAsset)) as TextAsset;         
              
        //读取每一行的内容  
        string [] lineArray = binAsset.text.Split ("
    "[0]);  
              
        //创建二维数组  
        Array = new string [lineArray.Length][];  
              
        //把csv中的数据储存在二位数组中  
        for(int i =0;i < lineArray.Length; i++)  
        {  
            Array[i] = lineArray[i].Split (',');  
        }  
    }  

    先读取test文件,这里要注意,你要把test文件放到Asset的Resources目录下,没有这个目录就自己创建一个。因为每一行结尾都会有个“ ”,所以用这个可以分隔出每行数据,然后我们创建一个二维数组Array,行数用上一句求出的行数据,列数待定。因为每一行的数据都是用“,”分隔符分开的,所以我们用逗号分隔出每列数据,再以行为单位保存在Array中。现在你打印Array.Length应该是5,表示行数,Array[0].Length应该是3,表示列数。

    4、以行列数读取数据

    string GetDataByRowAndCol(int nRow, int nCol)  
    {  
        if (Array.Length <= 0 || nRow >= Array.Length)  
            return "";  
        if (nCol >= Array[0].Length)  
            return "";  
              
        return Array[nRow][nCol];  
    }  

    这个代码很简单,前面都是行列越界判断,没啥好说的,这时打印GetDataByRowAndCol(1,2)应该是“这是苹果”。

    5、以Id和名称读取数据

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

    string GetDataByIdAndName(int nId, string strName)  
    {  
        if (Array.Length <= 0)  
            return "";  
              
        int nRow = Array.Length;  
        int nCol = Array[0].Length;       
        for (int i = 1; i < nRow; ++i) {  
            string strId = string.Format("
    {0}", nId);  
            if (Array[i][0] == strId) {  
                for (int j = 0; j < nCol; ++j) {  
                    if (Array[0][j] == strName) {  
                        return Array[i][j];  
                    }  
                }  
            }  
        }  
              
        return "";  
    }  

    上面代码也很简单,先循环行数据,判断ID是否相同,找到ID后再循环列数据,看名称是否相同,然后返回行列对应的数据。这里有一点值得注意,就是判断Id的时候,id前面会有个“ ”,这是换行标识符,你可以用Debug的方式看一下Array,除了第一行,每一行的Id都会有个“ ”的前缀,所以必须这么判断。这时打印GetDataByIdAndName(4,"name")应该是“梨”。

  • 相关阅读:
    MySQL 数据库常用命令
    mysql日常小总结(其实就今天)
    idea修改格式化代码快捷键
    let和const的区别
    【山外笔记-Powershell 教程】学习资源汇总
    C语言实现高于等于平均分的学生数据放在b所指的数组中,高于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。
    学生的记录由学号和成绩组成,输入的指定分数60 69范围,求分数范围内的学生成绩输出
    判断一个字符串是否是回文
    删去一维无序数组中所有相同的数,使之只剩一个。
    删去一维有序数组中所有相同的数,使之只剩一个。
  • 原文地址:https://www.cnblogs.com/qiuxiangmuyu/p/5826133.html
Copyright © 2011-2022 走看看