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 つの構造が必要な理由は、ユーザーがデータをエクスポートできるサード パーティのサイトを活用しようとしているからです。このサイトは、最初の行がヘッダーである csv ファイルとしてエクスポートします。私は本当に2つのヘッダーしか気にせず、現時点ではリセットは必要ありません(ただし、選択して選択できないすべての列をエクスポートする必要があります)。
2番目の構造は、ユーザーがこのサイトを使いたくない、使いにくいなどの理由で使用したくない場合です。Excelを開いてデータを手動で書き込み、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[];
}
}