【发布时间】:2012-06-14 15:03:55
【问题描述】:
我有一个处理一些大型 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.cs 中的 CsvReader.PrepareReader(TextReader reader):第 93 行
非常感谢任何建议。另外,这是应对挑战的最佳方式吗?
注意事项:框架 2.0
谢谢。
【问题讨论】: