说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

如何使用C#读取csv文件

HTML文档下载 WORD文档下载 PDF文档下载
本文提供了一个可以读取CSV的类。

创建CSV读取类CSVReader

 

public class CSVReader{	// 对象定义	private Stream objStream;	private StreamReader objReader;	// 需要添加System.IO.Stream命名空间	public CSVReader(Stream filestream) : this(filestream, null) { }	 public CSVReader(Stream filestream, Encoding enc)	 {		 this.objStream = filestream;		 //check the Pass Stream whether it is readable or not		 if (!filestream.CanRead)		 {			 return;		 }         objReader = (enc != null) ? new StreamReader(filestream, enc) : new StreamReader(filestream);	 }     //解析每行数据     public string[] GetCSVLine()     {         string data = objReader.ReadLine();		 if (data == null) return null;         if (data.Length == 0) return new string[0];		 //System.Collection.Generic use this namespace		 ArrayList result = new ArrayList();		 //解析CSV数据		 ParseCSVData(result, data);         return (string[])result.ToArray(typeof(string));	 }	 private void ParseCSVData(ArrayList result, string data)	 {		 int position = -1;		 while (position < data.Length)			 result.Add(ParseCSVField(ref data, ref position));	 }	 private string ParseCSVField(ref string data, ref int StartSeperatorPos)	 {		 if (StartSeperatorPos == data.Length – 1)		 {			 StartSeperatorPos++;			 return "";		 }         		 int fromPos = StartSeperatorPos + 1;		 if (data[fromPos] == '"')		 {			 int nextSingleQuote = GetSingleQuote(data, fromPos + 1);			 int lines = 1;			 while (nextSingleQuote == -1)			 {                 data = data + "\n" + objReader.ReadLine();			 nextSingleQuote = GetSingleQuote(data, fromPos + 1);			 lines++;			 if (lines > 20)				 throw new Exception("lines overflow: " + data);			 }			 StartSeperatorPos = nextSingleQuote + 1;			 string tempString = data.Substring(fromPos + 1, nextSingleQuote – fromPos – 1);			 tempString = tempString.Replace("'", """);				 return tempString.Replace("\"\"", "\"");		 }         		 int nextComma = data.IndexOf(',', fromPos);		 if (nextComma == -1)		 {			 StartSeperatorPos = data.Length;			 return data.Substring(fromPos);		 }		 else		 {			 StartSeperatorPos = nextComma;			 return data.Substring(fromPos, nextComma – fromPos);		 }	 }	 	 private int GetSingleQuote(string data, int SFrom)	 {		 int i = SFrom – 1;		 while (++i < data.Length)			 if (data[i] == '"')			 {				 if (i < data.Length – 1 && data[i + 1] == '"')				 {					 i++;					 continue;				 }				 else					 return i;			 }			 return -1;	 }}

该类创建好后,按钮的click事件按如下方式处理:

 

if (FileUpload1.PostedFile.FileName == string.Empty){	Label1.Visible = true;	return;}else{	//save the file	//restrict user to upload other file extenstion	string[] FileExt = FileUpload1.FileName.Split('.');	string FileEx = FileExt[FileExt.Length - 1];	if (FileEx.ToLower() == "xls")	{		FileUpload1.SaveAs(Server.MapPath("File//" + FileUpload1.FileName));	}	else	{		Label1.Visible = true;		return;	}}//create object of  previous memtain class CSVReader and pass the streamXLsReader reader = new XLsReader(FileUpload1.PostedFile.InputStream);//get the header from hearstring[] headers = reader.GetXLSine();DataTable dt = new DataTable();//add headers of dara tableforeach (string strHeader in headers)dt.Columns.Add(strHeader);string[] data;while ((data = reader.GetXLSine()) != null)dt.Rows.Add(data);//绑定gridviewGridView1.DataSource = dt;GridView1.DataBind();

 

 

 

 

 

腾讯X5浏览服务正式开放 30多款APP成为首批受益者 Node.js设计经验谈 LeanKanban University首位中国认证讲师路宁:看板会为更多国内企业带来深刻变革 环信IM沙龙纪实:无分享不IM,无社交不未来 【工具推荐】ESL:更简洁、更高效的标准加载器 【先锋】亲加通讯云:以云服务模式为App提供社交引擎 2014中国移动开发者大调查第一批获奖名单大曝光 移动开发云服务AVOS Cloud宣布完成A轮融资 Uplinq2014:人工智能嵌入硬件 万物互联建生态 Uplinq2014:基于Vuforia的新奇智能玩具 一应俱全!开源跨平台3D应用开发框架Minko 【线下技术培训】敏捷测试实战解析和系统方案 《近匠》Ping++:简单、高效、第三方支付SDK 有关编程的12个猜想 【问底】王帅:深入PHP内核(二)——SAPI探究 【CTO俱乐部走进汽车之家】活动图文实录 只为逼格?超薄便携式无线充电设备Deuce 戴尔未来重心:云计算、大数据、移动互联与安全 【讲师】搜狐于顺治:Container在搜狐PaaS平台中的应用实践 【先锋】从代码层诊断,云端OneAPM平台让开发者专注开发 阿里将推无线领域重磅计划 阿里百川无线开放大会揭晓 提升网站转化率的四步优化方案 开发者应该了解的API技术清单! 【讲师】腾讯刘永峰:Docker时代,公有云面临的挑战和机遇 移动开发工具服务商Mob推出免费短信验证码SDK 遇见他们,MDCC 2014移动开发者大会嘉宾揭秘 揭秘全球最小无线耳机背后的技术 《最终幻想》之父访谈:我为何转战F2P游戏开发 寓教于乐 11款最适合教儿童编程的学习工具 苹果iPhone6获工信部许可 本月17日在内地发售 使用Redis之前5个必须了解的事情 tocamt服务的自动启动和手工启动有何区别? 请教:金山词霸的屏幕取词用的是什么技术。是怎么实现的 用Delphi的朋友,公布我们的MSN帐号,大家互相学习好吗? 哪里有weblogic6.1 sp4 下载!!! window.print怎样才能不在页底打印页面的标题地址信息? 我的显示器怎么会有重影?? 请问如何用jsp实现如vb中的SSTab控件那样的效果? 有没有消息分数线什么时候出来啊??? 源码大放送2(注:适合新手以及和我一样懒的人!! ~v~) UTF-8?将字符转成UTF-8用PHP如何做??急? 类似matlab中simulink的界面如何实现?散分 关于分页显示的问题 截获getprocaddress遇到的问题. 請各位幫幫忙,關於剛開始安裝的問題: sql 查询? 怎样判断程序是否在运行,如果运行怎样关闭他呢? POP3邮件接收问题!!! 几个月来一直未解决的小BUG(多文档的标题) PB中怎么样定义游标变量 本人欲求计算机画图中的橡皮筋技术画线例程,请大家指教并加相关注释,先帖出代码都得分. 只为试一下新下的放分机,10钟后结贴 急急急!!!!!!!!!如何用ADO连接Sybase数据库? 这是广告,不知道是不是真的,没兴趣不要看啊 求购工程设计院信息管理集成系统的设计文档与源代码 想通了过问题,散分 那位大哥做过网络规划,系统集成方面的,我想电话求教,能帮个忙吗??? how to get chinese type method? 如何响应键盘事件? (7)今夜狂放1000分,8:15结帐:)需要分的来吧:)前600分已经放出。。 小问题,恳请帮忙,在线等候! 如何实现两个数据库之间的实时通讯? 高分请教,如何用JAVA实现浏览局域网里的其他机子的目录。在线等待 主板上是USB1。0的接口用USB2。0标准的移动硬盘,有办法安装使用吗?(在线等候) 探讨一下JSP的多国语言实现 这样一个功能怎么实现(在线等待) 调用COM时出错~~~ 问答:仅知类D是由类B按某种形式派生得到的,举一例说明,D不一定是B的子类型。 小问题,帮个忙 刚用C#开发了一个游戏,大家多提意见!有分 关于插入数据的问题 请问:谁有Delphi 5.x分布式多层应用电子商务篇的下载地址, pdf格式 Applet嵌入HTML中的问题!急!急!急! 小小问题,散分100!!!!!!!!!!!!你心动了吗? 如何在程序运行时让用户选择按照哪一列进行分组? 文件合并问题? 帮帮忙 请教如何删除控件 圈点“英雄”,针砭实弊 谁能帮我解决IMail不能外发邮件的毛病? vb请教 如何设置remote_login_passwordfile为exclusive 戛纳基努身材"走样&quo《富春》爆林志玲尼姑造型 牺牲秀发以陈数一家三口穿亲子装温馨郊游 儿子顽王学兵携小女友看话剧 戴情侣墨镜回避孙俪性感裸肩连裤装抢镜 吴秀波造型绅HIT-5新专辑写真曝光 造型国际范邓萃雯遭TVB下封杀令 网友:剧烂还戛纳女星走光照 范冰冰受惊花容失色名模妮娜热辣登杂志 大秀性感身材火力郭晶晶孕态初显:腹部明显隆起 围巾掩卡黛珊脱衣露底秀大肚 怀孕致身材走形娱乐圈女星倒追事件盘点 唐嫣曾为邱泽盘点大胆玩挤奶诱惑的十大胸猛女星高群书忘我挖鼻孔 赴饭局和管虎聊HI郭敬明《小时代》记者会 杨幂双眼皮贴刘烨豪掷800万给谢娜 曝光:中外明林峰带吴千语见家长 典礼上当众甜蜜热实拍日本地下夜店内景 性感女郎奢靡淫36岁范晓萱青春逼人 如同18岁美女古天乐向陈乔恩派定心丸 亲口拒绝吴君米兰达·可儿不慎走光 胸部露出春光外城管行政执法大队党政办百里毅行 关爱孤儿白沙桥校方认为:这套眼保健操更卫生华数传媒再次入选最能藏的狐狸,要数浙江的叶某临安过年,土特产年货置办起来菜鸟遇上菜鸟人气还不如他们的“圣旨文件夹”小寒运动,首推跳绳杭州:90岁奶奶起诉孙子霸房不还 孙浙江省海外留学人员创业园(下沙)杭二中、学军、杭高要来萧山招生啦发展引导资金开始申报了毕业了,他们的校园爱情依然盛放藏在名人旧居中的餐厅但也不能全靠外援冰芭的小秘密,让“天鹅”告诉你一年种出10亿元人行道违章停车、阻挡盲道要被罚老有所乐:打牌、下棋、锻炼,最开心有
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘