私は CSVHelper ライブラリを使用しています。このライブラリは、わずか 3 行のコードで CSV ファイルからオブジェクトのリストを抽出できます。
var streamReader = // Create a reader to your CSV file.
var csvReader = new CsvReader( streamReader );
List<MyCustomType> myData = csvReader.GetRecords<MyCustomType>();
ただし、 by file には無意味な行が含まれているため、ファイルの最初の 10 行をスキップする必要があります。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 ファイルを 1 行ずつ処理し、オブジェクトを抽出する前に各行を調べることですが、それはやや不器用です。