Is there any configuration or something that will let me add ;
after last value?
FirstName;SecondName
A;B
I need it to be
FirstName;SecondName;
A;B;
Here's my code:
using (TextWriter writer = new StreamWriter(fd.FileName, false, System.Text.Encoding.UTF8))
{
var csv = new CsvWriter(writer, new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = ";",
});
csv.Configuration.RegisterClassMap<DataRowClassMap>();
csv.WriteRecords(_rows);
}
Thanks in advance
edit. Map Class
public sealed class DataRowClassMap : ClassMap<DataRow>
{
public DataRowClassMap()
{
Map(m => m.ListingNumber).Ignore();
Map(m => m.FirstName).Index(0).Name("FirstName");
Map(m => m.LastName).Index(1).Name("LastName");
}
}
First solution - loop:
using (TextWriter writer = new StreamWriter(fd.FileName, false, System.Text.Encoding.UTF8))
{
var csv = new CsvWriter(writer, new CsvConfiguration(CultureInfo.InvariantCulture)
{
Delimiter = ";",
});
csv.Configuration.RegisterClassMap<DataRowClassMap>();
csv.WriteHeader<DataRow>(); // write headers
csv.WriteField(""); // it will be `;` in file
csv.NextRecord();
foreach (var item in _rows)
{
csv.WriteRecord(item); // actual data
csv.WriteField(""); // it will be `;` in file
csv.NextRecord();
}
}
Second solution - hack, creating new property:
public sealed class DataRowClassMap : ClassMap<DataRow>
{
public DataRowClassMap()
{
Map(m => m.ListingNumber).Ignore();
Map(m => m.FirstName).Index(0).Name("FirstName");
Map(m => m.LastName).Index(1).Name("LastName");
// solution hack
Func<DataRow, string> func = x => "";
Map(x => x.HackForCommaAfterLastColumn).Index(3).Name("").ConvertUsing(func);
}
}