Csv文件操作(創建、讀取、寫入、修改)
2022/9/11??????點擊:
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 讀取串口傳感器數據 2022/12/10
- 下一篇:Excel文件操作(創建、讀取、寫入、修改) 2022/9/11