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

如何使用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();

 

 

 

 

 

备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘