Csv文件操作(創(chuàng)建、讀取、寫入、修改)
Csv文件,又稱逗號分隔值文件,文件以純文本的形式存儲表格數(shù)據(jù),所以csv也是種殊的表格。
純文本就意味著該文件必須像二進制文件那樣解析,使用記事本打開,可以看到數(shù)據(jù)都是以逗號分隔。
csv文件由任意條數(shù)據(jù)組成,記錄間以換行符分隔,每條數(shù)據(jù)字段間以逗號分隔。
csv文件跟Excel文件雖然都是表格文件,但是格式還有有很大不同的,Excel文件用文本編輯器打開是堆亂碼,csv文件用文本編輯器打開就是以逗號分隔的數(shù)據(jù)。
csv文件的出現(xiàn)就是為了實現(xiàn)簡單的數(shù)據(jù)存儲,是種純文本的文件,*廣泛的應(yīng)用是在程序之間轉(zhuǎn)移表格數(shù)據(jù),能夠兼容各種程序,那么面對這樣的文件類型該如何創(chuàng)建、讀取、寫入、修改呢。
創(chuàng)建csv文件
Csv文件是純文本文檔,只需要按照定的格式保存文檔,然后添加后綴.csv即可。
定的格式:以換行分隔符分割每行,以逗號分割每列。
構(gòu)建DataTable數(shù)據(jù),創(chuàng)建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中數(shù)據(jù)寫入到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);
//寫入每行每列的數(shù)據(jù)
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();
}
}
}
}
因為這個函數(shù)需要傳遞進去個數(shù)據(jù)表DataTable數(shù)據(jù),所以,我們要先構(gòu)建個DataTable數(shù)據(jù),在這里就演示下如何創(chuàng)建DataTable數(shù)據(jù):
構(gòu)建DataTable
using Excel;
using OfficeOpenXml;
using System;
using System.Data;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
//創(chuàng)建表 設(shè)置表名
DataTable dt = new DataTable("Sheet1");
//創(chuàng)建列 有三列
dt.Columns.Add("名字");
dt.Columns.Add("年齡");
dt.Columns.Add("性別");
//創(chuàng)建行 每行有三列數(shù)據(jù)
DataRow dr = dt.NewRow();
dr["column0"] = "張三";
dr["column1"] = "18";
dr["column2"] = "男";
dt.Rows.Add(dr);
//取值 第行的123列的數(shù)據(jù)
Debug.Log(dt.Rows[0][0].ToString());
Debug.Log(dt.Rows[0][1].ToString());
Debug.Log(dt.Rows[0][2].ToString());
}
}
有了數(shù)據(jù)表數(shù)據(jù),就可以去創(chuàng)建csv文件了
using Excel;
using OfficeOpenXml;
using System;
using System.Data;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
//創(chuàng)建表 設(shè)置表名
DataTable dt = new DataTable("Sheet1");
//創(chuàng)建列 有三列
dt.Columns.Add("名字");
dt.Columns.Add("年齡");
dt.Columns.Add("性別");
//創(chuàng)建行 每行有三列數(shù)據(jù)
DataRow dr = dt.NewRow();
dr["名字"] = "張三";
dr["年齡"] = "18";
dr["性別"] = "男";
dt.Rows.Add(dr);
string filePath = Application.streamingAssetsPath + "\\data.csv";
SaveCSV(filePath, dt);
}
// 將DataTable中數(shù)據(jù)寫入到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);
//寫入每行每列的數(shù)據(jù)
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();
}
}
}
}
構(gòu)建DataTable數(shù)據(jù),創(chuàng)建csv文檔(第二種寫法)
using Excel;
using OfficeOpenXml;
using System;
using System.Data;
using System.IO;
using System.Text;
using UnityEngine;
public class Demo5 : MonoBehaviour
{
void Start()
{
//創(chuàng)建表 設(shè)置表名
DataTable dt = new DataTable("Sheet1");
//創(chuàng)建列 有三列
dt.Columns.Add("名字");
dt.Columns.Add("年齡");
dt.Columns.Add("性別");
//創(chuàng)建行 每行有三列數(shù)據(jù)
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)
{
//判斷數(shù)據(jù)表內(nèi)是否存在數(shù)據(jù)
if (mSheet.Rows.Count < 1)
return;
//讀取數(shù)據(jù)表行數(shù)和列數(shù)
int rowCount = mSheet.Rows.Count;
int colCount = mSheet.Columns.Count;
//創(chuàng)建個StringBuilder存儲數(shù)據(jù)
StringBuilder stringBuilder = new StringBuilder();
//讀取數(shù)據(jù)
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++)
{
//使用","分割每個數(shù)值
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文件就沒啥好說的,就是將讀取的數(shù)據(jù)保存到DataTable數(shù)據(jù)表中,然后讀取數(shù)據(jù)表里面的數(shù)據(jù)即可:
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讀取數(shù)據(jù)返回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 = "";
//記錄每行記錄中的各字段內(nèi)容
string[] aryLine = null;
string[] tableHead = null;
//標(biāo)示列數(shù)
int columnCount = 0;
//標(biāo)示是否是讀取的第行
bool IsFirst = true;
//逐行讀取CSV中的數(shù)據(jù)
while ((strLine = sr.ReadLine()) != null)
{
if (IsFirst == true)
{
tableHead = strLine.Split(',');
IsFirst = false;
columnCount = tableHead.Length;
//創(chuàng)建列
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數(shù)據(jù)表,就是因為這個數(shù)據(jù)結(jié)構(gòu)讀取、保存、使用數(shù)據(jù)都比較的方便。
本文來自網(wǎng)絡(luò),版權(quán)歸原作者所有
- 上一篇:matlab 讀取串口傳感器數(shù)據(jù) 2022/12/10
- 下一篇:Excel文件操作(創(chuàng)建、讀取、寫入、修改) 2022/9/11
