我現在用的是CSVHelper庫,它可以從一個CSV提取對象的列表只有三行代碼文件:如何作爲TextReader傳遞字符串集合?
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文件,並在提取對象之前檢查每一行,但我覺得有點笨拙。
我可能會去第二個選項,那麼你不需要把整個文件保存在內存中(就像你現在正在做的那樣) – Magnus
是的,考慮到它,我同意。該文件是用於停車場的,那些使用非現金系統的入口,並且來自全國各地,並且一定會相當大。儘管這是看不見的選擇。上面的第二個選項仍然是一次全部正確記錄的過程。 – ProfK