Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Write C# Lists of objects in CSV file [closed]

Tags:

I have a C# object having 8 array elements of size 200.I need to print these arrays into a CSV file on respective labels. Data might contain string,int and double.

Ex:

 time   time1   time2  Day  time4  time4 time5 time6 time7 1       5       9     Mon   7.0    8      9    5     NA 2 3 3 . . 200    200    200    Sun   200    200   200   200    200 

Oops, time1 etc are labels(Header) the data(8 lists having 200 elements) should write under these labels. Appreciate your response !

like image 406
Venu Avatar asked Aug 18 '11 22:08

Venu


2 Answers

You could write a generic function to write the objects:

public void WriteCSV<T>(IEnumerable<T> items, string path) {   Type itemType = typeof(T);   var props = itemType.GetProperties(BindingFlags.Public | BindingFlags.Instance)                       .OrderBy(p => p.Name);    using (var writer = new StreamWriter(path))   {     writer.WriteLine(string.Join(", ", props.Select(p => p.Name)));      foreach (var item in items)     {       writer.WriteLine(string.Join(", ", props.Select(p => p.GetValue(item, null))));     }   } } 

Used as:

var people = new List<Person> { new Person("Matt", "Abbott"), new Person("John Smith") }; WriteCSV(people, @"C:\people.csv"); 

Which might output:

Forename, Surname Matt", Abbott" John", Smith" 
like image 97
Matthew Abbott Avatar answered Oct 12 '22 01:10

Matthew Abbott


Assuming none of your data needs to have comma escaping, this should give you a general idea:

string[][] myArray = // your data string[] myHeaders = // your headers File.WriteAllText("somefile.csv",          string.Join(Environment.NewLine,              new[]{myHeaders}.Concat(myArray)             .Select(line => string.Join(",", line)))); 
like image 43
StriplingWarrior Avatar answered Oct 12 '22 01:10

StriplingWarrior