wordpress站内信群发,微信网站 教程,外网常用网站,专门做流程图的网站系列文章目录
Unity工具 文章目录 系列文章目录前言一、Csv是什么#xff1f;二、创建csv文件2-1、构建表数据2-2、创建表方法2-3、完整的脚本#xff08;第一种方式#xff09;2-4、运行结果2-5、完整的脚本#xff08;第二种方式#xff09;2-6、运行结果2-7、想用哪种…系列文章目录
Unity工具 文章目录 系列文章目录前言一、Csv是什么二、创建csv文件2-1、构建表数据2-2、创建表方法2-3、完整的脚本第一种方式2-4、运行结果2-5、完整的脚本第二种方式2-6、运行结果2-7、想用哪种方式都可以 三、读取csv文件3-1、代码实现3-1、读取结果 总结 大家好我是心疼你的一切不定时更新Unity开发技巧觉得有用记得一键三连哦。
前言
在程序开发中经常会遇到要从外部文件中读取数据的情况文件类型也比较多。
常见的文件类型Txt、Json、Xml、Excel、Csv、 本文就是Csv文件操作 这是对Excel文件的操作 简单记录一下方便使用 提示以下是本篇文章正文内容下面案例可供参考
一、Csv是什么
Csv文件又称逗号分隔值文件文件以纯文本的形式存储表格数据所以csv也是一种特殊的表格。
纯文本就意味着该文件必须像二进制文件那样解析使用记事本打开可以看到数据都是以逗号分隔。
csv文件由任意条数据组成记录间以换行符分隔每条数据字段间以逗号分隔。
csv文件跟Excel文件虽然都是表格文件但是格式还有有很大不同的Excel文件用文本编辑器打开是一堆乱码csv文件用文本编辑器打开就是以逗号分隔的数据。
csv文件的出现就是为了实现简单的数据存储是一种纯文本的文件最广泛的应用是在程序之间转移表格数据能够兼容各种程序那么面对这样的文件类型该如何创建、读取、写入、修改呢。
以下就是csv文件的详解
二、创建csv文件
Csv文件是纯文本文档只需要按照特定的格式保存文档然后添加后缀.csv即可。
特定的格式以换行分隔符分割每一行以逗号分割每一列。
2-1、构建表数据 //创建数据public void FoundTable(){//创建表 设置表名DataTable dt new DataTable(Sheet1);//创建列 有三列dt.Columns.Add(名字);dt.Columns.Add(年龄);dt.Columns.Add(性别);//创建行 每一行有三列数据DataRow dr dt.NewRow();dr[column0] 张三;dr[column1] 28;dr[column2] 女;dt.Rows.Add(dr);//取值 第一行的123列的数据Debug.Log(dt.Rows[0][0].ToString());Debug.Log(dt.Rows[0][1].ToString());Debug.Log(dt.Rows[0][2].ToString());}2-2、创建表方法 public static void SaveCSV(string filePath, DataTable dt){FileInfo fi new FileInfo(filePath);//判断有没有此文件,没有就创建if (!fi.Directory.Exists){fi.Directory.Create();}using (FileStream fs new FileStream(filePath, FileMode.Create, FileAccess.Write)){using (StreamWriter sw new StreamWriter(fs, System.Text.Encoding.UTF8)){string data ;//写入表头for (int i 0; i dt.Columns.Count; i){data dt.Columns[i].ColumnName.ToString();if (i dt.Columns.Count - 1){data ,;}}sw.WriteLine(data);//写入每一行每一列的数据for (int i 0; i dt.Rows.Count; i){data ;for (int j 0; j dt.Columns.Count; j){string str dt.Rows[i][j].ToString();data str;if (j dt.Columns.Count - 1){data ,;}}sw.WriteLine(data);}sw.Close();fs.Close();}}}2-3、完整的脚本第一种方式
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using UnityEngine;public class CreateDataCSV : MonoBehaviour
{public string csvurl;DataTable dtt;// Start is called before the first frame updatevoid Start(){csvurl Application.streamingAssetsPath/123456.csv;FoundTable();SaveCSV(csvurl, dtt);}//创建数据public void FoundTable(){//创建表 设置表名DataTable dt new DataTable(Sheet1);//创建列 有三列dt.Columns.Add(名字);dt.Columns.Add(年龄);dt.Columns.Add(性别);//创建行 每一行有三列数据DataRow dr dt.NewRow();dr[0] 张三;dr[1] 28;dr[2] 女;dt.Rows.Add(dr);dtt dt;//取值 第一行的123列的数据Debug.Log(dt.Rows[0][0].ToString());Debug.Log(dt.Rows[0][1].ToString());Debug.Log(dt.Rows[0][2].ToString());}public static void SaveCSV(string filePath, DataTable dt){FileInfo fi new FileInfo(filePath);//判断有没有此文件,没有就创建if (!fi.Directory.Exists){fi.Directory.Create();}using (FileStream fs new FileStream(filePath, FileMode.Create, FileAccess.Write)){using (StreamWriter sw new StreamWriter(fs, System.Text.Encoding.UTF8)){string data ;//写入表头for (int i 0; i dt.Columns.Count; i){data dt.Columns[i].ColumnName.ToString();if (i dt.Columns.Count - 1){data ,;}}sw.WriteLine(data);//写入每一行每一列的数据for (int i 0; i dt.Rows.Count; i){data ;for (int j 0; j dt.Columns.Count; j){string str dt.Rows[i][j].ToString();data str;if (j dt.Columns.Count - 1){data ,;}}sw.WriteLine(data);}sw.Close();fs.Close();}}}// Update is called once per framevoid Update(){}
}
脚本随便挂到一个地方即可
2-4、运行结果 2-5、完整的脚本第二种方式
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
using UnityEngine;public class CreateDataCSV1 : MonoBehaviour
{public string csvurl;DataTable dtt;// Start is called before the first frame updatevoid Start(){csvurl Application.streamingAssetsPath/123456.csv;FoundTable();SaveCSV(csvurl, dtt);}//创建数据public void FoundTable(){//创建表 设置表名DataTable dt new DataTable(Sheet1);//创建列 有三列dt.Columns.Add(名字);dt.Columns.Add(年龄);dt.Columns.Add(性别);//创建行 每一行有三列数据DataRow dr dt.NewRow();dr[0] 圣诞节啊;dr[1] 28;dr[2] 女;dt.Rows.Add(dr);dtt dt;//取值 第一行的123列的数据Debug.Log(dt.Rows[0][0].ToString());Debug.Log(dt.Rows[0][1].ToString());Debug.Log(dt.Rows[0][2].ToString());}public static void SaveCSV(string filePath, DataTable dt){//判断数据表内是否存在数据if (dt.Rows.Count 1)return;//读取数据表行数和列数int rowCount dt.Rows.Count;int colCount dt.Columns.Count;//创建一个StringBuilder存储数据StringBuilder stringBuilder new StringBuilder();//读取数据for (int i 0; i dt.Columns.Count; i){stringBuilder.Append(dt.Columns[i].ColumnName ,);}stringBuilder.Append(\r\n);for (int i 0; i rowCount; i){for (int j 0; j colCount; j){//使用,分割每一个数值stringBuilder.Append(dt.Rows[i][j] ,);}//使用换行符分割每一行stringBuilder.Append(\r\n);}//写入文件using (FileStream fileStream new FileStream(filePath, FileMode.Create, FileAccess.Write)){using (TextWriter textWriter new StreamWriter(fileStream, Encoding.UTF8)){textWriter.Write(stringBuilder.ToString());}}}// Update is called once per framevoid Update(){}
}
2-6、运行结果 2-7、想用哪种方式都可以
三、读取csv文件
3-1、代码实现
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Text;
using UnityEngine;public class RedCSV : MonoBehaviour
{void Start(){string filePath Application.streamingAssetsPath /123456.csv;DataTable dt OpenCSV(filePath);Debug.Log(dt.Rows[0][0]);Debug.Log(dt.Rows[0][1]);Debug.Log(dt.Rows[0][2]);}public static DataTable OpenCSV(string filePath)//从csv读取数据返回table{DataTable dt new DataTable();using (FileStream fs new FileStream(filePath, FileMode.Open, FileAccess.Read)){using (StreamReader sr new StreamReader(fs, Encoding.UTF8)){//记录每次读取的一行记录string strLine ;//记录每行记录中的各字段内容string[] aryLine null;string[] tableHead null;//标示列数int columnCount 0;//标示是否是读取的第一行bool IsFirst true;//逐行读取CSV中的数据while ((strLine sr.ReadLine()) ! null){if (IsFirst true){tableHead strLine.Split(,);IsFirst false;columnCount tableHead.Length;//创建列for (int i 0; i columnCount; i){DataColumn dc new DataColumn(tableHead[i]);dt.Columns.Add(dc);}}else{aryLine strLine.Split(,);DataRow dr dt.NewRow();for (int j 0; j columnCount; j){dr[j] aryLine[j];}dt.Rows.Add(dr);}}if (aryLine ! null aryLine.Length 0){dt.DefaultView.Sort tableHead[0] asc;}sr.Close();fs.Close();return dt;}}}
}
3-1、读取结果 总结
要记得csv文件就是一个纯文本的文件所以可以使用纯文本的形式去读取文件保存文件。
之所以用DataTable数据表就是因为这个数据结构读取、保存、使用数据都非常的方便。
当然也可以使用数组或者自定义类去解析csv文件只要是按照换行符进行分割然后按照逗号进行分割列即可 不定时更新Unity开发技巧觉得有用记得一键三连哦。