我有一个处理一些大型 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
非常感谢任何建议。另外,这是应对挑战的最佳方式吗?
注释:框架 2.0
谢谢。