zl程序教程

您现在的位置是:首页 >  后端

当前栏目

C#中csv文件与DataTable互相导入处理实例解析

c#实例文件导入 处理 解析 csv 互相
2023-06-13 09:15:40 时间

本文介绍了C#中csv文件与DataTable互相导入处理实例解析,主要功能代码封装处理下,相对比较简单。以后项目用到的话可以直接使用。具体方法如下:

1.封装好的类如下:

usingSystem;
usingSystem.Data;
usingSystem.IO;
usingSystem.Text;
usingCSharpUtilHelpV2;
usingStringUtilHelp;

namespaceDBUtilHelpV2Plus
{
publicstaticclassDBToolV2Plus
{
///<summary>
///将DataTable导出到CSV.
///</summary>
///<paramname="table">DataTable</param>
///<paramname="fullSavePath">保存路径</param>
///<paramname="tableheader">标题信息</param>
///<paramname="columname">列名称『eg:姓名,年龄』</param>
///<returns>导出成功true;导出失败false</returns>
publicstaticboolToCSV(thisDataTabletable,stringfullSavePath,stringtableheader,stringcolumname)
{
ArgumentChecked(table,fullSavePath);
//------------------------------------------------------------------------------------
try
{
string_bufferLine="";
using(StreamWriter_writerObj=newStreamWriter(fullSavePath,false,Encoding.UTF8))
{
if(!string.IsNullOrEmpty(tableheader))
_writerObj.WriteLine(tableheader);
if(!string.IsNullOrEmpty(columname))
_writerObj.WriteLine(columname);
for(inti=0;i<table.Rows.Count;i++)
{
_bufferLine="";
for(intj=0;j<table.Columns.Count;j++)
{
if(j>0)
_bufferLine+=",";
_bufferLine+=table.Rows[i][j].ToString();
}
_writerObj.WriteLine(_bufferLine);
}
returntrue;
}
}
catch(Exception)
{
returnfalse;
}
}
///<summary>
///参数检查
///</summary>
///<paramname="table"></param>
///<paramname="fullSavePath"></param>
privatestaticvoidArgumentChecked(DataTabletable,stringfullSavePath)
{
if(table==null)
thrownewArgumentNullException("table");
if(string.IsNullOrEmpty(fullSavePath))
thrownewArgumentNullException("fullSavePath");
string_fileName=CSharpToolV2.GetFileNameOnly(fullSavePath);
if(string.IsNullOrEmpty(_fileName))
thrownewArgumentException(string.Format("参数fullSavePath的值{0},不是正确的文件路径!",fullSavePath));
if(!_fileName.InvalidFileNameChars())
thrownewArgumentException(string.Format("参数fullSavePath的值{0},包含非法字符!",fullSavePath));
}
///<summary>
///将CSV文件数据导入到Datable中
///</summary>
///<paramname="table"></param>
///<paramname="filePath">DataTable</param>
///<paramname="rowIndex">保存路径</param>
///<returns>Datable</returns>
publicstaticDataTableAppendCSVRecord(thisDataTabletable,stringfilePath,introwIndex)
{
ArgumentChecked(table,filePath);
if(rowIndex<0)
thrownewArgumentException("rowIndex");
using(StreamReaderreader=newStreamReader(filePath,Encoding.UTF8,false))
{
inti=0,j=0;
reader.Peek();
while(reader.Peek()>0)
{
j=j+1;
string_line=reader.ReadLine();
if(j>=rowIndex+1)
{
string[]_split=_line.Split(",");
DataRow_row=table.NewRow();
for(i=0;i<_split.Length;i++)
{
_row[i]=_split[i];
}
table.Rows.Add(_row);
}
}
returntable;
}
}
}
}

2.代码使用测试如下:

usingSystem;
usingSystem.Data;
usingDBUtilHelpV2;
usingDBUtilHelpV2Plus;
namespaceDBUtilHelpV2PlusTest
{
classProgram
{
staticDataTabletestDb=null;
staticstringfullSavePath=string.Format(@"C:\{0}.csv",DateTime.Now.ToString("yyyyMMddHH"));
staticvoidMain(string[]args)
{
try
{
CreateTestDb();
Console.WriteLine(string.Format("DataTable导出到CSV文件{0}.",testDb.ToCSV(fullSavePath,"姓名,年龄","人员信息表")==true?"成功":"失败"));
testDb.Rows.Clear();
Console.WriteLine(string.Format("清空数据,当前{0}条数据.",testDb.Rows.Count));
testDb=testDb.AppendCSVRecord(fullSavePath,2);
Console.WriteLine(string.Format("CSV文件导入到Datable,导入{0}条数据.",testDb.Rows.Count));
}
catch(Exceptionex)
{
Console.WriteLine(ex.Message);
}
finally
{
Console.ReadLine();
}
}
staticvoidCreateTestDb()
{
if(testDb==null)
{
testDb=DBToolV2.CreateTable("Name,Age|int");
for(inti=1;i<=10;i++)
{
DataRow_row=testDb.NewRow();
_row["Name"]=string.Format("YanZhiwei_{0}",i);
_row["Age"]=i;
testDb.Rows.Add(_row);
}
}
}
}
}

运行效果如下图所示: