いくつかの大きなCSVファイルを処理するシステムがあります。
これらのファイルに、実際のコンマ区切りのコンテンツの前に、区切られていない、価値のない行が多数含まれている可能性があるというシナリオが発生しました。
私が採用したアプローチは、余分な行の数を確認するための一時的なリーダーを作成し、処理の準備ができているその数の行で作業中のTextReaderを移動することです。
私のコードは次のとおりです。
private static TextReader PrepareReader(TextReader reader)
{
// Variables
TextReader tmpReader = reader;
Int32 superfluousLineCount = 0;
// Determine how many useless lines we have
using (tmpReader)
{
string line;
string headerIdentifier = "&1,";
while ((line = tmpReader.ReadLine()) != null)
{
// Check if the line starts with the header row identifier
if (line.Substring(0, 3) != headerIdentifier)
{
// Increment the superfluous line counter
superfluousLineCount++;
}
else
{
break;
}
}
}
// Move the source reader through how many lines we want to ignore
using (reader)
{
for (int i = superfluousLineCount; i > 0; i--)
{
reader.ReadLine();
}
}
// Return
return reader;
}
ただし、reader.ReadLine();
コードのこの部分では、次のようになります。
for (int i = superfluousLineCount; i > 0; i--)
{
reader.ReadLine();
}
...次の例外をスローします
閉じたTextReaderから読み取ることはできません。mscorlibメソッドのObjectDisposedException:Void ReaderClosed()
スタックトレース:System.IO .__ Error.ReaderClosed()、System.IO.StreamReader.ReadLine()、CsvReader.PrepareReader(TextReader reader)、CsvReader.cs:line 93
どんなアドバイスも大歓迎です。また、私の挑戦に取り組むための最良の方法はありますか?
注:Framework 2.0
ありがとう。