Csv文件操作(创建、读取、写入、修改)
2024-1-5 10:05:31 点击:
Csv文件,又称逗号分隔值文件,文件以纯文本的形式存储表格数据,所以csv也是一种特殊的表格。
纯文本就意味着该文件必须像二进制文件那样解析,使用记事本打开,可以看到数据都是以逗号分隔。
csv文件由任意条数据组成,记录间以换行符分隔,每条数据字段间以逗号分隔。
csv文件跟Excel文件虽然都是表格文件,但是格式还有有很大不同的,Excel文件用文本编辑器打开是一堆乱码,csv文件用文本编辑器打开就是以逗号分隔的数据。
csv文件的出现就是为了实现简单的数据存储,是一种纯文本的文件,*广泛的应用是在程序之间转移表格数据,能够兼容各种程序,那么面对这样的文件类型该如何创建、读取、写入、修改呢。
创建csv文件
Csv文件是纯文本文档,只需要按照特定的格式保存文档,然后添加后缀.csv即可。
特定的格式:以换行分隔符分割每一行,以逗号分割每一列。
构建DataTable数据,创建csv文档(第一种写法)
using Excel; using OfficeOpenXml; using System; using System.Data; using System.IO; using System.Text; using UnityEngine; public class Demo5 : MonoBehaviour { void Start() { } // 将DataTable中数据写入到CSV文件中 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(); } } } }因为这个函数需要传递进去一个数据表DataTable数据,所以,我们要先构建一个DataTable数据,在这里就演示一下如何创建DataTable数据:
构建DataTable
using Excel; using OfficeOpenXml; using System; using System.Data; using System.IO; using System.Text; using UnityEngine; public class Demo5 : MonoBehaviour { void Start() { //创建表 设置表名 DataTable dt = new DataTable("Sheet1"); //创建列 有三列 dt.Columns.Add("名字"); dt.Columns.Add("年龄"); dt.Columns.Add("性别"); //创建行 每一行有三列数据 DataRow dr = dt.NewRow(); dr["column0"] = "张三"; dr["column1"] = "18"; 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()); } }有了数据表数据,就可以去创建csv文件了
using Excel; using OfficeOpenXml; using System; using System.Data; using System.IO; using System.Text; using UnityEngine; public class Demo5 : MonoBehaviour { void Start() { //创建表 设置表名 DataTable dt = new DataTable("Sheet1"); //创建列 有三列 dt.Columns.Add("名字"); dt.Columns.Add("年龄"); dt.Columns.Add("性别"); //创建行 每一行有三列数据 DataRow dr = dt.NewRow(); dr["名字"] = "张三"; dr["年龄"] = "18"; dr["性别"] = "男"; dt.Rows.Add(dr); string filePath = Application.streamingAssetsPath + "\\data.csv"; SaveCSV(filePath, dt); } // 将DataTable中数据写入到CSV文件中 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(); } } } }
构建DataTable数据,创建csv文档(第二种写法)
using Excel; using OfficeOpenXml; using System; using System.Data; using System.IO; using System.Text; using UnityEngine; public class Demo5 : MonoBehaviour { void Start() { //创建表 设置表名 DataTable dt = new DataTable("Sheet1"); //创建列 有三列 dt.Columns.Add("名字"); dt.Columns.Add("年龄"); dt.Columns.Add("性别"); //创建行 每一行有三列数据 DataRow dr = dt.NewRow(); dr["名字"] = "张三"; dr["年龄"] = "18"; dr["性别"] = "男"; dt.Rows.Add(dr); string filePath = Application.streamingAssetsPath + "\\data.csv"; SaveCSV(filePath, dt); } public void SaveCSV(string CSVPath, DataTable mSheet) { //判断数据表内是否存在数据 if (mSheet.Rows.Count < 1) return; //读取数据表行数和列数 int rowCount = mSheet.Rows.Count; int colCount = mSheet.Columns.Count; //创建一个StringBuilder存储数据 StringBuilder stringBuilder = new StringBuilder(); //读取数据 for (int i = 0; i < mSheet.Columns.Count; i++) { stringBuilder.Append(mSheet.Columns[i].ColumnName + ","); } stringBuilder.Append("\r\n"); for (int i = 0; i < rowCount; i++) { for (int j = 0; j < colCount; j++) { //使用","分割每一个数值 stringBuilder.Append(mSheet.Rows[i][j] + ","); } //使用换行符分割每一行 stringBuilder.Append("\r\n"); } //写入文件 using (FileStream fileStream = new FileStream(CSVPath, FileMode.Create, FileAccess.Write)) { using (TextWriter textWriter = new StreamWriter(fileStream,Encoding.UTF8)) { textWriter.Write(stringBuilder.ToString()); } } } }
读取csv文件
读取csv文件就没啥好说的,就是将读取的数据保存到DataTable数据表中,然后读取数据表里面的数据即可:
using Excel; using OfficeOpenXml; using System; using System.Data; using System.IO; using System.Text; using UnityEngine; public class Demo5 : MonoBehaviour { void Start() { string filePath = Application.streamingAssetsPath + "\\data.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; } } } }
csv文件就是一个纯文本的文件,所以可以使用纯文本的形式去读取文件,保存文件。之所以用DataTable数据表,就是因为这个数据结构读取、保存、使用数据都比较的方便。
文章内容整理来自网络,版权归原作者所有,如有问题,请联系我们!- 上一篇:没有啦
- 下一篇:matlab 读取串口传感器数据 2023/12/31