Как определить тип данных столбца во время выполнения при анализе файла CSV с заголовком - PullRequest
0 голосов
/ 04 ноября 2018

Я использую FileHelpers для загрузки данных CSV (кредит - при поиске найдено это ответ / результат поиска).

Пользователь просматривает каталог, выбирает файлы с заголовками и загружает их для анализа. Мои проблемы в том, что они - один временных файлов, чьи столбцы / классы / типы не известны ранее .

Вопрос : как определить тип данных столбца при анализе?

После поиска я нашел функцию с именем public Type RecordType { get; }, которая обеспечивает тип записи. Мне нужна помощь, чтобы получить тип данных Col в записи.

var fNengine = new FileHelperEngine<AttendeeEventManifesto>();
var fNrecords = engine.ReadFile("AttendeesByEvents.csv"); 

// How to get the Col types?
// HeaderText = typeof(..*notKNown*).GetCsvHeader();
//..var headers = fNrecords.HeaderText();

//foreach (var header in headers)
  //  Console.WriteLine(header.RecordType() + `\n`);     

Я также нашел этот ответ на SO , но помощников времени выполнения, упомянутых @ shmap00 или справкой, на которую он ссылается, больше нет, я также посмотрел в дереве исходных текстов. Кто-нибудь может указать мне ссылку, пожалуйста

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете использовать конструктор классов для создания своего класса во время выполнения, например:

DelimitedClassBuilder cb = new DelimitedClassBuilder("MyProduct", delimiter: ",");

cb.AddField("Name", typeof(string));
cb.LastField.TrimMode = TrimMode.Both;

cb.AddField("Description", typeof(string));
cb.LastField.FieldQuoted = true;
cb.LastField.QuoteChar = '"';
cb.LastField.QuoteMode = QuoteMode.OptionalForBoth;

// etc... e.g., add a date field
cb.AddField("SomeDate", typeof(DateTime));

engine = new FileHelperEngine(cb.CreateRecordClass());

DataTable dt = engine.ReadFileAsDT("test.txt");
...