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 или другом приложении для работы с электронными таблицами, дважды щелкните по правой границе заголовка, и он автоматически увеличит ширину столбца.

Другие вопросы по тегам