IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Avez-vous déjà utilisé CsvHelper ?


Sujet :

C#

  1. #1
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut Avez-vous déjà utilisé CsvHelper ?
    Bonjour,

    Comme l'indique l'intitulé je suis à la recherche d'utilisateur de cette superbe Class, mais qui manque cruellement de documentation.

    Pour ceux qui ont déjà exploité cette outil :

    Je cherche à exploiter tel ou tel autre ClassMap en fonction de l'entête du fichier.
    Avez vous une idée sur la méthodologie ?

    Merci.

    Pour ceux qui ne connaisse pas cela permet de transformer votre contenu CSV en un objet ou vice-versa, en fonction d'une class.

    Votre fichier CSV
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    personId | FName | LName | BookId | BookName | PageId
     
    1 | name1 | name1 | 1 | book1 | 1
    1 | name1 | name1 | 1 | book1 | 2
    1 | name1 | name1 | 1 | book1 | 3
    1 | name1 | name1 | 2 | book2 | 1
    1 | name1 | name1 | 2 | book2 | 2
    2 | name2 | name2 | 3 | book3 | 1
    2 | name2 | name2 | 3 | book3 | 2
    2 | name2 | name2 | 3 | book3 | 3
    Votre Class où vous n'êtes pas obligé de déclarer l'ensemble de vos colonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public class DataBook
    {
    public string? personId { get; set; }
    public string? FName { get; set; }
    public string? BookId { get; set; }
    }

    Votre appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    using (CsvReader csv = new(reader, config))
    {
     
    	List<DataBook>? recordsImport = csv.GetRecords<DataBook>().ToList();
     
    }
    Vous pouvez même exploitez des "schémas" sans modifier votre class si vous ne souhaitez pas exploiter l'une de vos colonnes dans un cas précis.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    using (CsvReader csv = new(reader, config))
    {
    	csv.Context.RegisterClassMap<ImportShort >();
    	List<DataBook>? recordsImport = csv.GetRecords<DataBook>().ToList();
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class ImportShort : ClassMap<DataBook>
    {
        public ImportShort ()
        {
            Map(m => m.personId);
            Map(m => m.FName).Ignore();
            Map(m => m.BookId);
        }
    }
    Il plein d'autre mécanisme.

  2. #2
    Membre confirmé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    701
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2007
    Messages : 701
    Points : 597
    Points
    597
    Par défaut
    J'ai trouvé pour mon problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    void Main()
    {
        var config = new CsvConfiguration(CultureInfo.InvariantCulture)
        {
            IgnoreBlankLines = false,		
        };
        using (var reader = new StreamReader("path\\to\\file.csv"))
        using (var csv = new CsvReader(reader, config))
        {
            csv.Context.RegisterClassMap<FooMap>();
            csv.Context.RegisterClassMap<BarMap>();
            var fooRecords = new List<Foo>();
            var barRecords = new List<Bar>();
            var isHeader = true;
            while (csv.Read())
            {
                if (isHeader)
                {
                    csv.ReadHeader();
                    isHeader = false;
                    continue;
                }
     
                if (string.IsNullOrEmpty(csv.GetField(0)))
                {
                    isHeader = true;
                    continue;
                }
     
                switch (csv.HeaderRecord[0])
                {
                    case "FooId":
                        fooRecords.Add(csv.GetRecord<Foo>());
                        break;
                    case "BarId":
                        barRecords.Add(csv.GetRecord<Bar>());
                        break;
                    default:
                        throw new InvalidOperationException("Unknown record type.");
                }
            }
        }
    }
     
    public class Foo
    {
        public int Id { get; set; }
        public string Name { get; set; }
    }
     
    public class Bar
    {
        public Guid Id { get; set; }
        public string Name { get; set; }
    }
     
    public sealed class FooMap : ClassMap<Foo>
    {
        public FooMap()
        {
            Map(m => m.Id).Name("FooId");
            Map(m => m.Name);
        }
    }
     
    public sealed class BarMap : ClassMap<Bar>
    {
        public BarMap()
        {
            Map(m => m.Id).Name("BarId");
            Map(m => m.Name);
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Le WPS, on s'en sert, ou l'on ne s'en sert pas ? L'avez-vous déjà utilisé, et pourquoi ?
    Par grunt2000 dans le forum SIG : Système d'information Géographique
    Réponses: 1
    Dernier message: 13/08/2018, 11h54
  2. Réponses: 18
    Dernier message: 16/05/2013, 14h05
  3. Réponses: 4
    Dernier message: 12/02/2008, 15h02
  4. [Référencement] Avez-vous utilisé des offres, satisfaits ?
    Par Invité4 dans le forum Référencement
    Réponses: 20
    Dernier message: 25/01/2006, 17h36
  5. [Système] Avez vous deja utilisé flock ?
    Par ePoX dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2005, 14h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo