c#读取csv到数组_C#读取CSV

本文档提供了使用C#读取CSV文件到DataTable,以及将DataTable数据写入CSV文件的方法。通过`CSVFileHelper`类的`SaveCSV`和`OpenCSV`静态方法,可以方便地实现CSV数据的读写。读取时,根据文件内容创建DataTable,写入时则将DataTable转换为CSV格式并保存到指定路径。
摘要由CSDN通过智能技术生成

public classCSVFileHelper

{///

///将DataTable中数据写入到CSV文件中///

/// 提供保存数据的DataTable

/// CSV的文件路径

public static void SaveCSV(DataTable dt, stringfullPath)

{

FileInfo fi= newFileInfo(fullPath);if (!fi.Directory.Exists)

{

fi.Directory.Create();

}

FileStream fs= newFileStream(fullPath, System.IO.FileMode.Create, System.IO.FileAccess.Write);//StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);

StreamWriter sw = newStreamWriter(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();

str= str.Replace("\"", "\"\"");//替换英文冒号 英文冒号需要换成两个冒号

if (str.Contains(',') || str.Contains('"')|| str.Contains('\r') || str.Contains('\n')) //含逗号 冒号 换行符的需要放到引号中

{

str= string.Format("\"{0}\"", str);

}

data+=str;if (j < dt.Columns.Count - 1)

{

data+= ",";

}

}

sw.WriteLine(data);

}

sw.Close();

fs.Close();

DialogResult result= MessageBox.Show("CSV文件保存成功!");if (result ==DialogResult.OK)

{

System.Diagnostics.Process.Start("explorer.exe", Common.PATH_LANG);

}

}///

///将CSV文件的数据读取到DataTable中///

/// CSV文件路径

/// 返回读取了CSV数据的DataTable

public static DataTable OpenCSV(stringfilePath)

{

Encoding encoding= Common.GetType(filePath); //Encoding.ASCII;// DataTable dt = newDataTable();

FileStream fs= newFileStream(filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read);//StreamReader sr = new StreamReader(fs, Encoding.UTF8);

StreamReader sr = newStreamReader(fs, encoding);//string fileContent = sr.ReadToEnd();//encoding = sr.CurrentEncoding;//记录每次读取的一行记录

string strLine = "";//记录每行记录中的各字段内容

string[] aryLine = null;string[] tableHead = null;//标示列数

int columnCount = 0;//标示是否是读取的第一行

bool IsFirst = true;//逐行读取CSV中的数据

while ((strLine = sr.ReadLine()) != null)

{//strLine = Common.ConvertStringUTF8(strLine, encoding);//strLine = Common.ConvertStringUTF8(strLine);

if (IsFirst == true)

{

tableHead= strLine.Split(',');

IsFirst= false;

columnCount=tableHead.Length;//创建列

for (int i = 0; i < columnCount; i++)

{

DataColumn dc= newDataColumn(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();returndt;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值