Mukil Deepthi
Mukil Deepthi

Reputation: 6452

c# csvhelper writing complex data

I have the following object structure and trying to write to csv using csvhelper. but the filenames column in not getting added.

public class ClusterData
{
    public IEnumerable<string> FileName { get; set; }

    public int? ClusterNumber { get; set; }

    public string TopTerm { get; set; }
}


    using (var writer = new StreamWriter(@"C:\Clean.csv"))
    {
        var csv = new CsvWriter(writer);
        csv.WriteHeader<ClusterData>();
        foreach (var item in dataToCsv)
        {
            foreach (var filename in item.FileName)
            {
                csv.WriteField(filename);
                csv.WriteField(item.ClusterNumber);
                csv.WriteField(item.TopTerm);
                csv.NextRecord();
            }
        }
        writer.Flush();
    }

how to achieve with this?i want the outer loop to be repeated once and inner loop to be repeated for each item in filename.

Thanks

Upvotes: 1

Views: 827

Answers (1)

Nkosi
Nkosi

Reputation: 247098

Extract the desired data and then use the writer to send it to file

using (var writer = new StreamWriter(@"C:\Clean.csv")) {
    var data = new List<ClusterData>();

    //...assuming data is poulated

    var dataToCsv = data.SelectMany(item => item.FileName.Select(filename => new {
        FileName = filename,
        ClusterNumber = item.ClusterNumber,
        TopTerm = item.TopTerm
    }));

    var csv = new CsvWriter(writer);
    csv.WriteRecords(dataToCsv);
}

A linq query is used to construct the desired object format for each file name in the data.

The data is then converted to CSV as it normally would using a CsvWriter

Upvotes: 1

Related Questions