Reputation: 679
Can anyone help me to create a csv file from List, my scenario is, i have a multi dimensional values like below in a List
List<string[]> lst = new List<string[]>();
lst= csv1.ToList();
lst contains the values like,
lst[0] = {string[53]}
lst[1] = {string[53]}
lst[2] = {string[53]}
lst[3] = {string[53]}
lst[4] = {string[53]}
and string[53] contains the values like
lst[0]
string[0] = "abc"
string[1] = "def"
string[2] = "ghi"
string[3] = "jkl"
string[4] = "mno"
...
lst[1]
string[0] = "123"
string[1] = "456"
string[2] = "789"
string[3] = "10"
string[4] = "11"
...
I just wanted to write this multi-dimensional list to csv file as each item in lst[] to rows in csv and each item in string[] to columns such that the final output in my csv is
abc,def,ghi,jkl,mno
123,456,789,10,11
Any help would be really appreciated.
Upvotes: 27
Views: 79305
Reputation: 1062865
At the simplest level, not handling quoting / escaping / multi-line CSV issues, then just loop; maybe something like:
using (var file = File.CreateText(path))
{
foreach(var arr in lst)
{
file.WriteLine(string.Join(",", arr));
}
}
or a tiny bit more efficient (no intermediary string):
using (var file = File.CreateText(path))
{
foreach (var arr in lst)
{
if (String.IsNullOrEmpty(arr)) continue;
file.Write(arr[0]);
for(int i = 1 ; i < arr.Length ; i++)
{
file.Write(',');
file.Write(arr[i]);
}
file.WriteLine();
}
}
Upvotes: 36
Reputation: 2284
use linq:
File.WriteAllLines("text.txt", lst.Select(x => string.Join(",", x)));
Upvotes: 35