Я делаю сайт, который использует CSV-файл, этот файл может быть в 2 форматах (возможно, больше в будущем).
Структура 1
Header 1 Header 2 Header 3 Header 4
a b c d
x x x x
Структура 2
Header 1 Header 4
a d
x x
Выше показано, как это будет показано в Excel (если смотреть на raw, все будет разделено запятыми)
Причина, по которой я хочу иметь 2 структуры, заключается в том, что я пытаюсь использовать сторонний сайт, с которого пользователь может экспортировать свои данные. Этот сайт экспортирует его в виде CSV-файла с первой строкой заголовков. Я действительно забочусь только о 2 из заголовков, и в настоящее время сброс не требуется (но вы должны экспортировать все столбцы, которые невозможно выбрать).
Вторая структура, если пользователь не хочет использовать этот сайт, потому что он не хочет, неудобно делать это и т. Д. У него есть возможность открыть Excel и записать данные вручную, а затем сохранить их. как CSV-файл.
Так что для людей, работающих в ручном режиме, я хочу сделать это как можно более простым, как если бы я не использовал данные заголовка 2 и заголовка 4, зачем мне их заставлять вводить их? Однако в то же время, если люди идут первым путем и экспортируют данные, я не хочу, чтобы им приходилось загружать файл в excel up и удалять 2 столбца.
Я собираюсь требовать, чтобы заголовок всегда был целым и был первым рядом. Единственная идея, которая мне пришла в голову - это прочитать первый ряд и посмотреть порядок заголовков. Если у него есть 4 заголовка в точном порядке, то выведите его в одну сторону. Если только 2 заголовка в этом порядке отображают его по-другому.
Я знаю, что FileHelpers имеет возможность создавать несколько разделителей и выбирать способ их рендеринга, но так как я смотрю на заголовки, я не уверен, что это запечено или мне нужно как-то написать это самому а затем скажите ему, что делать.
У кого-нибудь есть идея, могу ли я сделать это с помощью filehelpers?
Редактировать
это то, что я до сих пор
MultiRecordEngine engine = new MultiRecordEngine(typeof(Format2), typeof(Format1));
engine.RecordSelector = new RecordTypeSelector(CustomSelector);
using (TextReader textReader = new StreamReader(stream))
{
if (engine.RecordType == typeof(Format2))
{
var myArry = engine.ReadStream(textReader) as Format2[];
}
else if(engine.RecordType == typeof(Format1))
{
var myArry = engine.ReadStream(textReader) as Format1[];
}
}