我正在制作一个使用 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 中的显示方式(如果查看原始数据,它将全部用逗号分隔)
我想要有 2 个结构的原因是因为我正在尝试利用用户可以从中导出数据的 3rd 方站点。该站点将其导出为 csv 文件,第一行是标题。我真的只关心 2 个标题,目前不需要重置(但您必须导出所有无法选择的列)。
第二种结构是,如果用户不希望使用此站点,因为他们不想这样做,这样做不舒服等等。他们可以选择打开 excel 并手动写入数据,然后将其保存为 csv文件。
因此,对于手动操作的人,我想让它尽可能简单,就好像我不使用 Header 2 和 Header 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[];
}
}