In .aspx page:
<table>
<tr>
<td>
<asp:FileUpload ID="FileUpload1" runat="server" />
</td>
<td>
<asp:Button ID="Button1" runat="server" OnClientClick="return noFilePresent();" OnClick="Button1_Click" Text="Upload CSV" />
</td>
</tr>
<tr>
<td colspan="2">
<asp:Label ID="lblMsg" Text="Please Select Proper File" runat="server" BorderColor="White"
Font-Bold="True" ForeColor="Red" Visible="false"></asp:Label>
</td>
</tr>
<tr>
<td>
<asp:GridView ID="gv" runat="server"></asp:GridView>
</td>
</tr>
</table>
In .aspx.cs :
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
//save the file
//restrict user to upload other file extenstion
string[] FileExt = FileUpload1.FileName.Split('.');
string FileEx = FileExt[FileExt.Length - 1];
if (FileEx.ToLower() == "csv")
{
FileUpload1.SaveAs(Server.MapPath("CSVLoad//" + FileUpload1.FileName));
}
else
{
Response.Write("Upload a valid file");
return;
}
//create object for CSVReader and pass the stream
CSVReader reader = new CSVReader(FileUpload1.PostedFile.InputStream);
//get the header
string[] headers = reader.GetCSVLine();
DataTable dt = new DataTable();
//add headers
foreach (string strHeader in headers)
dt.Columns.Add(strHeader);
string[] data;
while ((data = reader.GetCSVLine()) != null)
dt.Rows.Add(data);
//bind gridview
gv.DataSource = dt;
gv.DataBind();
}
CSVReader.cs:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.IO;
using System.Text;
using System.Collections;
/// <summary>
/// Summary description for CSVReader
/// </summary>
namespace Csv.Reader
{
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;
}
}
}
Output:
No comments:
Post a Comment