0
votes

Applicateur CSV dotnet incapable d'analyser le fichier

J'essaie d'analyser un fichier CSV sur une liste d'un article d'une classe donnée. Je suis assez nouveau au monde Dotnet. J'utilise .NET (2.2.402) Ceci est le code de ma classe xxx

ceci est la section du code où j'essaie d'analyser le fichier xxx

c'est le Contenu du fichier xxx

Comme vous pouvez le voir pour le souci de test, j'ai hu marché le chemin. C'est l'erreur que je reçois

csvhelper.headervalidationException: en-tête avec nom 'msisdn' n'était pas a trouvé. Si vous attendez des en-têtes manquants et que vous voulez Ignorer cette validation, définissez la configuration heavalideated sur NULL. Vous pouvez également modifier la fonctionnalité pour faire autre chose, comme connecter le problème. à Csvhelper.configuration.configurationIfonction.configurationS.Anghabalidated (Boolean Isvalid, String [] Headnames, Int32 HeaderNameDex, LectureContext Contexte) chez csvhelper.csvreader.validateheader (carte de classe Map) à Csvhelper.csvreader.getRecordst + Movenext () à System.linq.enumerable.count [Tsource] (source iEnumerable`1) à Ombulkpayment.Controls.PaymentsController.Payment (SavePaymentResource ressource) dans C: \ Utilisateurs \ BMHB8456 \ SOURCE \ REPOS \ OMBULKPAYMENT \ OMBULKPAYMENT \ CONTRÔLAIRES \ PAIEMENTSCONTROLLER.CS: Ligne 59 chez Lambda_Method (fermeture, objet, objet []) à Microsoft.extensions.internal.ObjectMethodexecutor.execute (objet cible, objet [] paramètres) à Microsoft.aspnetcore.mvc.internal.actionMethodexecuteur.syncActionResultexecutor.execute (iacctionResultTyPeMapper Mapper, ObjectMethodExecutor Executor, Contrôleur d'objet, Objet [] Arguments)


2 commentaires

Cela échoue sur le tout premier domaine de la toute première rangée. Cela indique parfois un problème plus vaste, par ex. Le fichier est en réalité en blanc, contient des caractères non valides, voire une ligne vierge en haut. Vérifiez le fichier.


Je travaillais sur Windows 10 OS, après la commutation de MacOS High Sierra, je reçois l'erreur exacte


3 Réponses :


1
votes

définir explicitement le délimiteur. Remplacez la ligne xxx pré>

avec p> xxx pré>

Le délimiteur par défaut dépend des paramètres régionaux du système appelé Séparateur de liste. P>

Retirez également les espaces entre le nom d'en-tête du fichier CSV. Gardez-les comme ci-dessous: P>

Msisdn,Amount,PersonName,Message,Description,Notify


0 commentaires

0
votes

Pas vraiment sûr de CSVHelper, mais vous n'avez pas besoin de composants supplémentaires pour lire des fichiers CSV Nativement ... Vous pouvez utiliser OLEDB pour le lire comme fichier de données plat:

public DataTable ReadCsv(string filename, bool hasHeaders = true, string delimiter = ",")
{
    var dt = new System.Data.DataTable();

    var fi = new System.IO.FileInfo(filename);

    var connStr = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"{0}\";Extended Properties='text;HDR={1};FMT=Delimited({2})';",
                                fi.DirectoryName,
                                ((hasHeaders) ? "Yes" : "No"),
                                delimiter);

    var commStr = string.Format("SELECT * FROM [{0}]", fi.Name);

    using (var conn = new System.Data.OleDb.OleDbConnection(connStr))
    using (var cmd = new System.Data.OleDb.OleDbCommand(commStr, conn))
    using (var adapter = new System.Data.OleDb.OleDbAdapter(cmd))
    {
        adapter.Fill(dt);
    }

    return dt;
}


0 commentaires

1
votes

Nice Trouver sur l'utilisation de CSVHelper , c'est un projet open source et est la bibliothèque la plus facile que je ' J'ai trouvé à utiliser.

J'ai essayé les suivantes avec vos données de test et j'ai été capable de le faire fonctionner avec succès: xxx

Vous pouvez afficher un exemple presque identique répertorié sur leur site ici .


0 commentaires