Home   Subscribe   Linkedin
  Archive Contact  

Read and write *.csv File in C#

The following example demonstrates how to Read and write *.csv File.

Read *.csv File:

internal static TableData ReadCsvFile(string filePath) 
       { 
           if (!File.Exists(filePath)) return null;

           var fileExtention = Path.GetExtension(filePath); 
           if (fileExtention != ".csv") return null;

           var table = new TableData 
           { 
               DataColumns = new List<string>(), 
               DataRows = new List<Dictionary<string, object>>() 
           };

           try 
           { 
               var connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filePath.Substring(0, filePath.LastIndexOf('\\')) + 
                                              ";Extended Properties='text;HDR=yes;FMT=Delimited;'";

               using (var connection = new OleDbConnection(connectionString)) 
               { 
                   connection.Open();

                   var restriction = new[] { null, null, ConvertNormalToOledbString(Path.GetFileName(filePath)), null }; 
                   var workSheetNamesDataTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, restriction); 
                   if (workSheetNamesDataTable == null) 
                   { 
                       return null; 
                   } 
                   var dataRow = workSheetNamesDataTable.Rows.Cast<DataRow>().Where(workSheet => workSheet != null).FirstOrDefault(); 
                   var sheetName = dataRow["TABLE_NAME"].ToString();

                   var query = "select * from [" + sheetName + "]"; 
                   var dataSet = new DataSet();

                   using (var dataAdapter = new OleDbDataAdapter(query, connection)) 
                   { 
                       var dTable = new DataTable(sheetName); 
                       dataAdapter.Fill(dTable); 
                       dataSet.Tables.Add(dTable); 
                   } 
                   var rows = dataSet.Tables[0].Rows; 
                   table.TableName = sheetName; 
                   foreach (DataColumn column in dataSet.Tables[0].Columns) 
                   { 
                       table.DataColumns.Add(column.ColumnName); 
                   } 
                   var columnCount = table.DataColumns.Count; 
                   foreach (DataRow row in rows) 
                   { 
                       var newRow = new Dictionary<string, object>(); 
                       for (var i = 0; i < columnCount; i++) 
                       {

                           newRow.Add(table.DataColumns[i], row[table.DataColumns[i]]); 
                       } 
                       table.DataRows.Add(newRow); 
                   } 
                   connection.Close(); 
               } 
           } 
           catch 
           {


           } 
           return table; 
       } 
       private static string ConvertNormalToOledbString(string str) 
       { 
           str = str.Replace('.', '#'); 
           str = str.Replace('[', '('); 
           str = str.Replace(']', ')'); 
           return str; 
       }


Write *.csv File:

internal static void CreateCsvFile(TableData tableData, string directoryPath) 
        { 
            if(tableData==null || tableData.DataColumns==null || tableData.DataColumns.Count<=0 
               || tableData.DataRows==null || tableData.DataColumns.Count<=0) 
            return; 
            if (!Directory.Exists(directoryPath)) 
                Directory.CreateDirectory(directoryPath); 
            var fileName = Guid.NewGuid().ToString() + ".csv"; 
            var fileStream = File.Create(directoryPath + fileName);

            using (var writer = new CsvFileWriter(fileStream)) 
            { 
                //Write Header Row 
                var headerRow = new CsvRow(); 
                headerRow.AddRange(tableData.DataColumns.Select(t => String.Format(t))); 
                writer.WriteRow(headerRow);

                //Write value Row 
                foreach (var t1 in tableData.DataRows) 
                { 
                    var row = new CsvRow(); 
                    row.AddRange(tableData.DataColumns.Select((t, j) => String.Format(t1[tableData.DataColumns[j]].ToString()))); 
                    writer.WriteRow(row); 
                } 
              
            } 
        }

 

 I have attached the sample application along with this post

ReadandwriteCsvFile.zip (23.02 kb)

Posted by: Mohd Ishaq

Categories: C#, Console Application

Tags:

Serialize and Deserialize XML into List<T>

Below are the two methods for serialization and deserialization which take generic list as parameter.

private XDocument Serialize<T>(List<T> paramList)
    {

        var doc = new XDocument();
        System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(paramList.GetType());

        System.Xml.XmlWriter writer = doc.CreateWriter();

        serializer.Serialize(writer, paramList);

        writer.Close();   

        return doc;        
    }

private List<T> Deserialize<T>(XDocument doc)
    {
        System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(List<T>));

        System.Xml.XmlReader reader = doc.CreateReader();

        List<T> result = (List<T>)serializer.Deserialize(reader);
        reader.Close();

        return result;
    }
 So now we can serialize whatever list we want. We don't need to specify the list type every time.
 
// For serialize

List<MyType> list = new List<MyType>();
        list.Add(new MyType());
        list.Add(new MyType() { Name = "Try", Value=123 });
        var xml =   Serialize(list);
        xml.Save(filePath);  // filePath is the location where xml is saved

// For deserialize

var document = new XDocument(XDocument.Load(filePath));
List<MyType> newList = Deserialize<MyType>(document );
Posted by: Mohd Ahmed

Categories: ASP.NET, C#, XML

Tags: