[转载]C# 读取 CSV 文件 - fiozhao - 博客园

[转载]C# 读取 CSV 文件 – fiozhao – 博客园.

最近做一个C#项目要导入CSV文件中的数据到Oracle中,使用Aspose.Cells读取中文字段标题却乱码,表的最后多出几行null记录,而 且不是免费的,后来找到了NPOI,顾名思义,就是POI的.NET版本,POI是一套用Java写成的库,能够帮助开发者在没有安装微软Office的 情况下读写Office 97-2003的文件,支持的文件格式包括xls, doc,
ppt等。而且是免费的,学了半天,得出一个结论,杀鸡用牛刀。最后决定自已写一个读取及写入CSV文件的代码,效果非常好。现分享受应趣的朋友门。

using System;
using System.Data;
using System.IO;

namespace DBUtility
{
public static class CsvHelper
{
///
/// 写入CSV文件
///

///DataTable ///文件全名 /// 是否写入成功
public static Boolean SaveCSV(DataTable dt, string fullFileName)
{
Boolean r = false;
FileStream fs = new FileStream(fullFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.Default);
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++)
{
data += dt.Rows[i][j].ToString();
if (j < dt.Columns.Count - 1)
{
data += ",";
}
}
sw.WriteLine(data);
}

sw.Close();
fs.Close();

r = true;
return r;
}

///
/// 打开CSV 文件
///

///文件全名 /// DataTable
public static DataTable OpenCSV(string fullFileName)
{
return OpenCSV(fullFileName, 0, 0, 0, 0, true);
}

///
/// 打开CSV 文件
///

///文件全名 ///开始行 ///开始列 ///获取多少行 ///获取多少列 ///是有标题行 /// DataTable
public static DataTable OpenCSV(string fullFileName, Int16 firstRow = 0, Int16 firstColumn = 0, Int16 getRows = 0, Int16 getColumns = 0, bool haveTitleRow = true)
{
DataTable dt = new DataTable();
FileStream fs = new FileStream(fullFileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
StreamReader sr = new StreamReader(fs, System.Text.Encoding.Default);
//记录每次读取的一行记录
string strLine = "";
//记录每行记录中的各字段内容
string[] aryLine;
//标示列数
int columnCount = 0;
//是否已建立了表的字段
bool bCreateTableColumns = false;
//第几行
int iRow = 1;

//去除无用行
if (firstRow > 0)
{
for (int i=1; i < firstRow;i++)
{
sr.ReadLine();
}
}

// { ",", ".", "!", "?", ";", ":", " " };
string[] separators = { "," };
//逐行读取CSV中的数据
while ((strLine = sr.ReadLine()) != null)
{
strLine = strLine.Trim();
aryLine = strLine.Split(separators, System.StringSplitOptions.RemoveEmptyEntries);

if (bCreateTableColumns == false)
{
bCreateTableColumns = true;
columnCount = aryLine.Length;
//创建列
for (int i = firstColumn; i < (getColumns == 0 ? columnCount : firstColumn+ getColumns); i++)
{
DataColumn dc
= new DataColumn(haveTitleRow == true ? aryLine[i] : "COL" + i.ToString());
dt.Columns.Add(dc);
}

bCreateTableColumns = true;

if (haveTitleRow == true)
{
continue;
}
}

DataRow dr = dt.NewRow();
for (int j = firstColumn; j < (getColumns == 0 ? columnCount : firstColumn + getColumns); j++) { dr[j - firstColumn] = aryLine[j]; } dt.Rows.Add(dr); iRow = iRow + 1; if (getRows > 0)
{
if (iRow > getRows)
{
break;
}
}

}

sr.Close();
fs.Close();
return dt;
}
}
}
赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏