Grundsätzlich versuche ich, CSV-Datei mit CSVHelper zu lesen. Der Trick besteht darin, dass es mehr als eine Datei gibt (jedes Mal, wenn der Benutzer eine andere auswählt) und hat jede von ihnen eine andere Struktur.Lesen verschiedener CSV mit CSVHelper
Die einzige Sache, die sie teilen, ist die erste Spalte mit dem Namen "Id", dann hat jede von ihnen unterschiedliche Anzahl von Spalten (von 2 zusätzlichen bis zu 5) mit verschiedenen Datentypen.
Ich habe versucht, dies so zu tun:
public class Country
{
public int Id { get; set; }
public IList<string> Attributes { get; set; }
}
public sealed class CountryMap : CsvClassMap<Country>
{
private List<string> attributeColumns =
new List<string> { "Attribute1", "Attribute2", "Attribute3", "Attribute4", "Attribute5" };
public override void CreateMap()
{
Map(m => m.Id).Name("Id").Index(0);
Map(m => m.Attributes).ConvertUsing(row =>
attributeColumns
.Select(column => row.GetField<string>(column))
.Where(value => String.IsNullOrWhiteSpace(value) == false)
);
}
}
Und dann mit:
using (var reader = new CsvReader(new StreamReader(FilePath,encoding.UTF8)))
{
reader.Configuration.RegisterClassMap<CountryMap>();
while (reader.Read())
{
var card = reader.GetRecord<Country>();
}
}
Aber nur das, was ich bekommen ist Auto = null.
Ich wäre wirklich dankbar für alle Tipps und Antworten.
meine CSVReader Klasse verwenden auf der Homepage folgenden: http://stackoverflow.com/questions/30129406/reading-data-from-csv-to-screen-output. Die Ergebnisse werden in eine DataTable eingefügt. Sie können die Klasse mehrmals aufrufen und die zweiten Ergebnisse in eine andere DataTable einfügen. Verwenden Sie einen Join, um zwei Datentypen zusammenzuführen. – jdweng