Hi ,
can anyone help me out to create the object of CSVReader()

i want to use Filename as a string at time of object creation
the below code is working fine :

CSVReader reader = new CSVReader(FileUpload1.PostedFile.InputStream);

and i want to use string as an argument like :

CSVReader reader = new CSVReader( "filename");

Recommended Answers

All 7 Replies

CSVReader is not a class in the .NET framework as far as I can tell so it depends -- did you write this class or do you have access to the source code? If not then it is a sealed class or can you derive another class from it? All you really need to here is read the file in to a byte array and then continue parsing. You could also encapsulte the CSVReader.

Thnx for reply,
here is the two constructor of the class

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);

  }

can u help me how can i convert the string or file name in to stream type

can i write the another constructor which can accept the file name as string argument !

Please use code tags when posting code on daniweb:

[code=csharp] ...code here...

[/code]

Please post the entire class. I need to see how the class is implemented to know what to change.

Here is the class actually it will take the file name from the file upload control but i want to process the file without file upload control

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;
using System.Data.SqlClient;

   public class CSVReader
   {
    private Stream objStream;
    private StreamReader objReader;
    

    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;

      }
   
  }

This should work:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.IO;
using System.Text;
using System.Collections;
using System.Data.SqlClient;

namespace daniweb
{

  public class CSVReader : IDisposable
  {
    //If you call the string FileName ctor then we should dispose since
    //we create the stream
    private bool shouldDispose;
    private Stream objStream;
    private StreamReader objReader;

    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 CSVReader(string FileName)
      :this(FileName, null)
    {
    }
    public CSVReader(string FileName, Encoding enc)
    {
      shouldDispose = true;
      this.objStream = new FileStream(FileName, FileMode.Open);
      objReader = (enc != null) ? new StreamReader(this.objStream, enc) : new StreamReader(this.objStream);
    }

    

    //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;

    }


    #region IDisposable Members

    public void Dispose()
    {
      if (shouldDispose)
      {
        if (this.objStream != null)
        {
          this.objStream.Dispose();
          this.objStream = null;
        }
      }
      //The reader should always be disposed since we created it
      if (this.objReader != null)
      {
        this.objReader.Dispose();
        this.objReader = null;
      }
    }

    #endregion
  }
}
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.