How to create CSVReader class
public class CSVReader
{
//
private Stream objStream;
private StreamReader objReader;
//add name space 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);
}
//parse the Line
public string[] GetCSVLine()
{
string data = objReader.ReadLine();
if (data == null) return null;
if (data.Length == 0) return new string[0];
//System.Collection.Generic
ArrayList result = new ArrayList();
//parsing CSV Data
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;
}
How To call it inn .CS file
on button clik and papulate this data in Grid view
protected void Button1_Click(object sender, EventArgs e)
{
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 for CSVReader and pass the stream
XLsReader reader = new XLsReader(FileUpload1.PostedFile.InputStream);
//get the header
string[] headers = reader.GetXLSine();
DataTable dt = new DataTable();
//add headers
foreach (string strHeader in headers)
dt.Columns.Add(strHeader);
string[] data;
while ((data = reader.GetXLSine()) != null)
dt.Rows.Add(data);
//bind gridview
GridView1.DataSource = dt;
GridView1.DataBind();
}
No comments:
Post a Comment