Я делаю сайт, который использует файл csv, этот файл может быть в двух форматах (возможно, в будущем будет больше).
Структура 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 up и записать данные вручную, а затем сохранить их как csv. файл.
Поэтому для людей, не занимающихся физическим трудом, я хочу сделать это как можно проще, как будто я не использую данные заголовка 2 и заголовка 4, почему я должен утруждать их, чтобы они вводили их? Однако в то же время, если люди идут первым путем и экспортируют данные, я не хочу, чтобы им приходилось загружать файл в Excel и удалять 2 столбца.
Я собираюсь потребовать, чтобы заголовок всегда был неповрежденным и был первой строкой. Единственная идея, которую я придумал, - это прочитать первую строку и посмотреть порядок заголовков. Если у него 4 заголовка в точном порядке, сделайте его односторонним. Если только 2 заголовка в этом порядке отображают его по-другому.
Я знаю, что 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[];
}
}