我正在使用 CSVHelper 库,它可以从 CSV 文件中提取对象列表,只需三行代码:
var streamReader = // Create a reader to your CSV file.
var csvReader = new CsvReader( streamReader );
List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();
但是,按文件有废话行,我需要跳过文件中的前十行。我认为使用 LINQ 来确保“干净”数据会很好,然后将该数据传递给CsvFReader
,如下所示:
public TextReader GetTextReader(IEnumerable<string> lines)
{
// Some magic here. Don't want to return null;
return TextReader.Null;
}
public IEnumerable<T> ExtractObjectList<T>(string filePath) where T : class
{
var csvLines = File.ReadLines(filePath)
.Skip(10)
.Where(l => !l.StartsWith(",,,"));
var textReader = GetTextReader(csvLines);
var csvReader = new CsvReader(textReader);
csvReader.Configuration.ClassMapping<EventMap, Event>();
return csvReader.GetRecords<T>();
}
但我真的坚持通过像TextReaer
.
我的替代方法是通过 CsvReader 逐行处理 CSV 文件,并在提取对象之前检查每一行,但我发现这有点笨拙。