Friday, February 5, 2010

Papulate dataset using Csv file Using C# Class method

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