J'utilise un objet StreamReader pour fournir des données source pour la bibliothèque LinqtoCSV. Quelque chose comme ça ...ignorer la ligne d'en-tête lors de l'analyse du fichier .csv
CsvFileDescription fileDescription = new CsvFileDescription()
{
SeparatorChar = ';',
MaximumNbrExceptions = 20,
};
CsvContext context = new CsvContext();
System.IO.MemoryStream stream = new System.IO.MemoryStream(file.Data);
System.IO.StreamReader reader = new System.IO.StreamReader(stream);
rows = context.Read<T>(reader, fileDescription);
Je traitement des fichiers csv qui ont un demi supplémentaire dans deux points de la ligne d'en-tête par exemple
Header1; Header2;Header3;
Cela déclenche des erreurs parce que la bibliothèque CSVtoLinQ attend 4 noms d'en-tête au lieu de 3. Je peux lire les lignes sélectionnées dans un objet IEnumerable, mais je ne peux pas manipuler directement le contenu de l'objet StreamReader. Je préférerais continuer avec la combinaison de StreamReader/LinqtoCSV car elle fournit beaucoup de fonctionnalités de validation, mais à cause du problème d'en-tête de fichier, j'ai besoin de regarder des alternatives.
Existe-t-il d'autres bibliothèques d'importation csv qui fournissent (i) une validation basée sur un champ lors de l'analyse d'un fichier (ii) un moyen d'ignorer la ligne d'en-tête?
J'ai fini par éditer le flux d'octets (l'objet file.data dans l'exemple) par exemple. System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding(); chaîne csvfile = enc.GetString (newFile.Data); chaîne csvfilenew = csvfile.Replace ("header3;", "header3; dummyfieldname"); newFile.Data = enc.GetBytes (csvfilenew); Je vais probablement ajouter du code pour vérifier l'encodage du fichier etc. mais pour l'instant ça semble fonctionner. L'attribution d'un nom de champ fictif, avec une définition de colonne de chaîne NULL, empêche linqtocsv de déclencher une exception. – baffled68