.NET处理CSV文件 插件CSVReader
原文:http://blog.csdn.net/dannywj1371/article/details/7217588
速度快,方便。
在c#中读取csv文件可以使用OLEDB当作数据库来读取,或者一行行的读取,然后使用正则表达式进行解析。使用oledb一般情况下也比较方便,但是效率不是很好,特别是csv文件很大的情况下。如果一行行的读取,对数据字段进行拆分是个难题,一般情况下使用英文逗号就可以了,但是很多情况下字段的内容也都包含了逗号,还有可能一条数据要占用多行。今天推荐一个别人封装好的csv读取类库:CSVReader,可以快速方便的处理csv数据。
类库作者开发这个程序经历了很多年了,最近还在更新中。点击下面的地址到官方网站:
http://www.codeproject.com/KB/database/CsvReader.aspx
这个程序的最大特点是速度快,按照作者的说法比使用OLEDB和正则表达式的方法大约快15倍,而且内存使用较少。举一个例子,在CPU P4 3.0 GHz, 内存1024 MB的电脑上,一个45M的csv文件,145个字段,5万条记录,用时大约1.5秒,每秒钟处理大约30M数据。当然肯定不是每次都这么快,影响的因素比较多,咱也不要较真。
这个程序还有一个特点是可以处理多行数据,前提是数据必须引用起来。
这个程序本质上也是按行读取的,在读取的时候会为当前记录保存一个字段缓存。作者还提供了一个类CachedCsvReader会将csv文件内容全部缓存到内存,然后从缓存中读取。
说了这么多,看看例子吧:
1、基本用法
using System.IO;
|
using LumenWorks.Framework.IO.Csv;
|
void ReadCsv()
|
{
|
// 打开"data.csv" ,这个csv文件应该有一个标题行
|
using (CsvReader csv =
|
new CsvReader( new StreamReader( "data.csv" ), true ))
|
{
|
//字段数量
|
int fieldCount = csv.FieldCount;
|
//标题数组
|
string [] headers = csv.GetFieldHeaders();
|
//只进的游标读取
|
while (csv.ReadNextRecord())
|
{
|
//遍历列
|
for ( int i = 0; i < fieldCount; i++)
|
Console.Write( string .Format( "{0} = {1};" ,
|
headers[i], csv[i]));
|
Console.WriteLine();
|
}
|
}
|
}
|
2、简单数据绑定(ASP.NET)
using System.IO;
|
using LumenWorks.Framework.IO.Csv;
|
void ReadCsv()
|
{
|
// 打开"data.csv" ,这个csv文件应该有一个标题行
|
using (CsvReader csv = new CsvReader(
|
new StreamReader( "data.csv" ), true ))
|
{
|
myDataRepeater.DataSource = csv;
|
myDataRepeater.DataBind();
|
}
|
}
|
对于DataGrid和GridView不能使用,原因是效率问题和控件的内部机制无法满足。具体说明看上边提供的网址。
3、复杂数据绑定(Windows Forms)
using System.IO;
|
using LumenWorks.Framework.IO.Csv;
|
void ReadCsv()
|
{
|
// 打开"data.csv" ,这个csv文件应该有一个标题行
|
using (CachedCsvReader csv = new
|
CachedCsvReader( new StreamReader( "data.csv" ), true ))
|
{
|
// 字段 标题将自动作为列的名称
|
myDataGrid.DataSource = csv;
|
}
|
}
|
4、自定义错误处理
using System.IO;
|
using LumenWorks.Framework.IO.Csv;
|
void ReadCsv()
|
{
|
// 打开"data.csv" ,这个csv文件应该有一个标题行
|
using (CsvReader csv = new CsvReader(
|
new StreamReader( "data.csv" ), true ))
|
{
|
// 丢失的字段将不会抛出异常,而被当作一个null值处理
|
csv.MissingFieldAction = MissingFieldAction.ReplaceByNull;
|
// 丢失的字段将不会抛出异常,而被当作一个null值处理
|
//csv.MissingFieldAction = MissingFieldAction.ReplaceByEmpty;
|
int fieldCount = csv.FieldCount;
|
string [] headers = csv.GetFieldHeaders();
|
while (csv.ReadNextRecord())
|
{
|
for ( int i = 0; i < fieldCount; i++)
|
Console.Write( string .Format( "{0} = {1};" ,
|
headers[i],
|
csv[i] == null ? "MISSING" : csv[i]));
|
Console.WriteLine();
|
}
|
}
|
}
|
5、自定义错误触发事件
using System.IO;
|
using LumenWorks.Framework.IO.Csv;
|
void ReadCsv()
|
{
|
// open the file "data.csv" which is a CSV file with headers
|
using (CsvReader csv = new CsvReader(
|
new StreamReader( "data.csv" ), true ))
|
{
|
// 格式化字段出错时,触发事件csv_ParseError
|
csv.DefaultParseErrorAction = ParseErrorAction.RaiseEvent;
|
csv.ParseError += new ParseErrorEventHandler(csv_ParseError);
|
int fieldCount = csv.FieldCount;
|
string [] headers = csv.GetFieldHeaders();
|
while (csv.ReadNextRecord())
|
{
|
for ( int i = 0; i < fieldCount; i++)
|
Console.Write( string .Format( "{0} = {1};" ,
|
headers[i], csv[i]));
|
Console.WriteLine();
|
}
|
}
|
}
|
void csv_ParseError( object sender, ParseErrorEventArgs e)
|
{
|
// 如果错误是字段不存在,则跳转到下一行
|
if (e.Error is MissingFieldCsvException)
|
{
|
Console.Write( "--MISSING FIELD ERROR OCCURRED" );
|
e.Action = ParseErrorAction.AdvanceToNextLine;
|
}
|
}
|
使用起来还是挺方便的,赶紧试试吧。
.NET处理CSV文件 插件CSVReader相关推荐
- jmeter 循环使用csv数据_如何通过jmeter读取csv文件行数来设置循环控制器的总数...
1.线程组里添加beanshell取样器 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOExce ...
- C#:CsvReader读取.CSV文件(转换成DataTable)
原文引用:https://www.codeproject.com/Articles/9258/A-Fast-CSV-Reader using LumenWorks.Framework.IO.Csv;u ...
- 一个生成Rockwell RSLogix5000 .csv 文件和.L5X文件的Excel插件
一个生成Rockwell RSLogix5000 .csv 文件和.L5X文件的Excel插件 不知道各位AB PLC工程师花多少时间和精力在重复性的编程工作上.比如模拟量输入输出的处理,模拟量报警, ...
- 使用CsvReader读取和写入csv文件
使用CsvReader读取和写入csv文件的简单操作Demo: import com.csvreader.CsvReader; import com.csvreader.CsvWriter;impor ...
- CsvReader和CsvWriter操作csv文件
使用方法: 提供把实例数据输出到磁盘csv文件的功能 提供读取csv文件,并封装成指定实例的功能 小工具自己依赖了slf4j+logbak,以及fastJson,如果与系统冲突,可以在pom文件中去除 ...
- WPS插件 - 保存Unicode编码的CSV文件
目的 CSV 配置文件使用UTF8-BOM编码格式,但是,无论是 Office 还是 WPS 打开 CSV 后的保存,都会将 CSV 文件改成 ANSI 编码.另外,保存时出现偏僻字符变成问号.长数字 ...
- vue导出导入csv文件(无需插件)
vue导出csv的时候有一个问题,就是如果数据是UTF-8格式的,需要在文件内容前面加BOM头,这样Excel程序可以识别这个BOM头,不会乱码. csv文件无非就是文本行加上BOM头,字符串解析就可 ...
- 使用 JavaCSV api 读取和写入 csv 文件
使用JavaCSV api 导包 我现在基本上都是Maven构建项目,相信大家也是,就不提供jar包了. <dependency><groupId>net.sourceforg ...
- java转换CSV文件生成xml格式数据
注册CSDN快六个月了,之前一直是看园子里的文章,或者碰到问题时,进来查点资料,今天终于决定写一篇自己在园子里的blog. 好吧,鉴于水平太菜,就只记录过程,其中原理啥的并不是很明晰,所以此blog只 ...
最新文章
- 定制CE系统随笔-续1
- 计算机维护系统Win8PE,u启动windows8PE工具箱
- python是如何进行内存管理的
- PHP做下载文件的方法
- Linux下Rsync+Inotify-tools实现数据实时同步
- Android 说说亮屏锁和键盘锁
- Unity3D中关于场景销毁时事件调用顺序的一点记录
- 自建lol服务器,终于干正事了?英雄联盟宣布:艾欧尼亚服务器将进行扩容
- ubuntu-文件管理、编辑
- python递归(一分钟读懂)
- [转]淘宝sdk——入门实战之header.php制作(二)
- MySQL----下载安装
- Django:(02)项目配置
- Python制作代码雨
- Linux - zookeeper集群搭建
- 设置页眉为计算机网络,如何设置页眉从指定页开始
- jojo第七部dio怎么复活_JOJO杂谈:DIO复活的那些年到底在干什么?
- 爬虫基础_01——正则
- vagrant启动失败解决
- 你知道哪些或者你们线上使用什么GC策略? 它有什么优势,适用于什么场景?