CSVHelper не форматирует CSV
Я использую CSVHelper, чтобы написать список<>, который я получил с помощью MySqlDataReader. Моя проблема заключается в правильном форматировании моего CSV-файла, я создал класс картографа, который должен определять, где размещать данные по имени столбца:
public ReaderMap()
{
Map(m => m.accountpersonfirstname).Name("E-mail Address");
Map(m => m.accountpersonlastname).Name("First Name");
Map(m => m.emailaddress).Name("Last Name");
}
Это прямо из http://joshclose.github.io/CsvHelper/.
Я собираюсь предположить, что моя проблема в том, как мой потоковый писатель записывает в мой существующий CSV, когда он каждый раз создает новый файл CSV (и я теряю свои имена), однако я также попытался использовать отображение по индексу в качестве ну, который должен работать с новым CSV-файлом, но он по-прежнему помещает данные рядом друг с другом, где я хотел бы видеть мои столбцы на расстоянии нескольких столбцов, чтобы данные были читаемыми - мне также нужны имена заголовков.
Вот мои два класса - картограф и исходный класс данных.
class Reader
{
public string emailaddress { get; set; }
public string accountpersonfirstname { get; set; }
public string accountpersonlastname { get; set; }
}
class ReaderMap : CsvClassMap<Reader>
{
public ReaderMap()
{
Map(m => m.accountpersonfirstname).Name("E-mail Address");
Map(m => m.accountpersonlastname).Name("First Name");
Map(m => m.emailaddress).Name("Last Name");
}
}
Я также собираюсь вставить часть своего кода, потому что, как я упоминал выше, возможно, я неправильно использую потоковую запись (хотя я так думаю).
MySqlCommand cmd = new MySqlCommand(sqlCmd, cn);
cmd.CommandType = CommandType.Text;
MySqlDataReader rdr = cmd.ExecuteReader();
while (rdr.Read())
{
Reader dataExport = new Reader();
dataExport.accountpersonfirstname = rdr.GetString(0);
dataExport.accountpersonlastname = rdr.GetString(1);
dataExport.emailaddress = rdr.GetString(2);
dataList.Add(dataExport);
}
var textWriter = new StreamWriter(filePath);
var csv = new CsvWriter(textWriter);
csv.Configuration.RegisterClassMap<ReaderMap>();
foreach (var item in dataList)
{
csv.WriteRecord(item);
}
Возможно, проблема в моей инициации вышеописанного или, возможно, все это связано с использованием устройства чтения данных - я не совсем уверен. Я надеюсь, что кто-то может пролить свет на это для меня.
РЕДАКТИРОВАТЬ:
Кажется, использование следующего позволило добавить его правильно. Однако моя первоначальная проблема все еще существует в том, что когда я перемещаю свое имя и фамилию заголовка в файле csv дальше в столбцы F и G, он все равно помещает их в B и C, как будто полностью игнорирует мой класс и конфигурацию, которые я установил.,
var textWriter = new StreamWriter(filePath, true);
1 ответ
При использовании кастома CsvClassMap
выходные данные записываются в виде "Свойство на столбец" без пропусков, если только свойство не игнорируется, в этом случае свойство не выводится, но пропусок не создается там, где его игнорируют.
Чтобы создать желаемые промежутки, вам нужно создать собственный метод, который записывает файл в нужном вам формате.
//Write out the header
var csv = new CsvWriter(textWriter);
csv.WriteField("A Column Data");
csv.WriteField("B (Empty)");
csv.WriteField("C (Empty)");
csv.WriteField("D (Empty)");
csv.WriteField("E (Empty)");
csv.WriteField("F Column Data");
csv.WriteField("G Column Data");
csv.NextRecord(); //Newline
foreach (var item in dataList)
{
csv.WriteRecord(item.PropertyA);
csv.WriteRecord(string.Empty);
csv.WriteRecord(string.Empty);
csv.WriteRecord(string.Empty);
csv.WriteRecord(string.Empty);
csv.WriteRecord(item.PropertyB);
csv.WriteRecord(item.PropertyC);
csv.NextRecord();
}
Сказав все это, почему вы пытаетесь вставить пробелы? Вставка пробелов не делает CSV более читабельным, и если вы открываете его в Excel или другом приложении для работы с электронными таблицами, дважды щелкните по правой границе заголовка, и он автоматически увеличит ширину столбца.