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 :

Sérialiser un document non balisé


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 : 702
    Par défaut Sérialiser un document non balisé
    Bonjour à tous,

    Je suis devant un cas de figure assez anodin, je dois sérialiser un export qui n'est pas structuré mais qui a une logique redondante.

    Voilà un petit extrait (les commentaires sont de moi ):

    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
     
    03/04/2023 //Date de l'exposition
    Exposition du grand classique // Nom de l'exposition
    243 // Numéro de rue
    Rue de LAMBREYAGE // Nom de la rue
    59450 // Code postal
    Sin-le-Noble // Nom de la ville
    Art Contemporain // Catégorie de l'exposition
    Matthieu dethé // Nom de l'artiste
    45 // Age de l'artiste
    France // Lieu de naissance
    23 // Œuvres exposées
    Benoit Breton
    34
    France
    12
    Jean Flou
    65
    Belgique
    53
    Street Art 
    Nombre 
    3 // Nombre d'exposant
    Sabart Deco // Catégorie de l'exposition
    32
    France
    14 
    Laure Pez
    23
    Suisse
    4
    Nombre
    2
    Total
    5 // Nombre d'exposant Total
    Ces données ne sont pas réelles mais le principe du fichier est malheureusement bien celui là...

    Comme vous pouvez le constater il y a un schéma redondant dans les données.
    Mais je ne vois pas comment créer un modèle de sérialisation, sachant qu'en plus le nombre d'artiste par catégorie peut varier

    Comment dois-je sérialiser ça sachant que j'ai déjà créé la class suivante :

    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
    public class Exposition
    {
        public DateTime DateDebut { get; set; }
        public string NomExposition { get; set; }
        public int NumRue { get; set; }
        public string NomRue { get; set; }
        public int CodePostale { get; set; }
        public string NomVille { get; set; }
        public List<Categorie> Categories { get; set; }
     
        public class Categorie
        {
            public string Nom { get; set; }
            public List<Artiste> Artistes { get; set; }
        }
     
        public class Artiste
        {
            public string Nom { get; set; }
            public int Age { get; set; }
            public string Pays{ get; set; }
            public int Oeuvre { get; set; }
        }
    Merci pour votre aide.

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Le truc c'est que tu n'a rien qui t'indique quelle est la données, il faut donc trouver un autre moyen pour faire ce lien.

    Les 7 premières lignes semblent être uniques, tu dois donc pouvoir te baser sur leurs positions.
    Et à priori la 7 est une catégorie.
    Pour le reste, tu as une suite chaine (nom), nombre (âge), chaine (pays), nombre (œuvres), donc une chaine puis un nombre (2 fois)
    Et dès lors qu'on commence une nouvelle catégorie, il y a deux chaines à la suite.

    C'est assez tiré par les cheveux et j'ignore si ça suffira mais tu peut déjà essayer de te baser sur ces critères

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    Il y a des incohérences dans ton exemple au niveau des type d'exposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    03/04/2023 //Date de l'exposition
    Exposition du grand classique // Nom de l'exposition
    243 // Numéro de rue
    Rue de LAMBREYAGE // Nom de la rue
    59450 // Code postal
    Sin-le-Noble // Nom de la ville
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Art Contemporain // Catégorie de l'exposition
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Matthieu dethé // Nom de l'artiste
    45 // Age de l'artiste
    France // Lieu de naissance
    23 // Œuvres exposées
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Benoit Breton
    34
    France
    12
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Jean Flou
    65
    Belgique
    53
    jusque là tout vas bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Street Art //<== ligne en trop ?
    Nombre 
    3 // Nombre d'exposant
    ici on ne connait pas la liste des exposant Street Art? ou la ligne "Street Art" est en trop? ou ????

    Ensuite on retrouve une structure de type artiste ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sabart Deco // Catégorie de l'exposition 
    32
    France
    14
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Laure Pez
    23
    Suisse
    4
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Total
    5 // Nombre d'exposant Total
    Donc pour moi on peut lire le bloc du début, ensuite, je parcourrai depuis la fin ou/et chercherai les mots clés Total et Nombre

  4. #4
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 : 702
    Par défaut
    Citation Envoyé par umfred Voir le message
    Il y a des incohérences dans ton exemple au niveau des type d'exposition
    Tu as raison !
    Come je l'ai dit ce n'est pas le fichier original, c'était une création de tête.
    J'ai inversé :

    Street Art //<== ligne en trop ?
    Nombre
    3 // Nombre d'exposant
    Cela aurait du être :

    Nombre
    3 // Nombre d'exposant
    Street Art //Catégorie de l'expo.
    Le fichier au propre :

    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
    03/04/2023
    Exposition du grand classique
    243
    Rue de LAMBREYAGE
    59450
    Sin-le-Noble
    Liste des participants
    Art Contemporain
    Matthieu dethé
    45
    France
    23
    Benoit Breton
    34
    France
    12
    Jean Flou
    65
    Belgique
    53
    Nombre 
    3
    Street Art
    Sabart Deco
    32
    France
    14 
    Laure Pez
    23
    Suisse
    4
    Nombre
    2
    Nombre Total d'exposant
    5
    Ce qui entraine le changement de la class :

    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
     
    public class Exposition
    {
        public DateTime DateDebut { get; set; }
        public string NomExposition { get; set; }
        public int NumRue { get; set; }
        public string NomRue { get; set; }
        public int CodePostale { get; set; }
        public string NomVille { get; set; }
        public List<Exposant> Exposants { get; set; }
     
    	public class Exposant
        {
            public string Nom { get; set; }
            public List<Categorie> Categories { get; set; }
        }
     
        public class Categorie
        {
            public string Nom { get; set; }
            public List<Artiste> Artistes { get; set; }
        }
     
        public class Artiste
        {
            public string Nom { get; set; }
            public int Age { get; set; }
            public string Pays{ get; set; }
            public int Oeuvre { get; set; }
        }
    }
    Mais depuis mon message j'ai avancé :

    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
    using (StreamReader reader = new StreamReader("Fichier.txt"))
    {
        Exposition exposition = new Exposition();
        exposition.DateDebut = DateTime.Parse(reader.ReadLine());
        exposition.NomExposition = reader.ReadLine();
        exposition.NumRue = int.Parse(reader.ReadLine());
        exposition.NomRue = reader.ReadLine();
        exposition.CodePostale = int.Parse(reader.ReadLine());
        exposition.NomVille = reader.ReadLine();
        reader.ReadLine(); // Ignorer "Liste des participants"
     
        // Lecture des Exposants
        exposition.Exposants = new List<Exposant>();
        string nomExposant = reader.ReadLine();
        while (nomExposant != "Nombre Total d'exposant")
        {
            // Lecture des Catégories
            Exposant exposant = new Exposant();
            exposant.Nom = nomExposant;
            exposant.Categories = new List<Categorie>();
            string nomCategorie = reader.ReadLine();
            while (nomCategorie != "Nombre")
            {
                // Lecture des Artistes
                Categorie categorie = new Categorie();
                categorie.Nom = nomCategorie;
                categorie.Artistes = new List<Artiste>();
                string nomArtiste = reader.ReadLine();
                while (nomArtiste != "Nombre")
                {
                    Artiste artiste = new Artiste();
                    artiste.Nom = nomArtiste;
                    artiste.Age = int.Parse(reader.ReadLine());
                    artiste.Pays = reader.ReadLine();
                    artiste.Oeuvre = int.Parse(reader.ReadLine());
                    categorie.Artistes.Add(artiste);
                    nomArtiste = reader.ReadLine();
                }
                exposant.Categories.Add(categorie);
                nomCategorie = reader.ReadLine();
            }
            exposition.Exposants.Add(exposant);
            nomExposant = reader.ReadLine();
        }
     
        // Serialisation de l'objet Exposition dans un fichier JSON
        string json = JsonConvert.SerializeObject(exposition);
        File.WriteAllText("exposition.json", json);
    }

  5. #5
    Membre éclairé Avatar de llaffont
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Juin 2007
    Messages
    702
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    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 : 702
    Par défaut
    Je vais devenir Chèvre.

    Car l'export ne gère pas les 0.
    Si je reprends mon exemple
    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
    03/04/2023
    Exposition du grand classique
    243
    Rue de LAMBREYAGE
    59450
    Sin-le-Noble
    Liste des participants
    Art Contemporain
    Matthieu dethé
    45
    France
    23
    18  // Je rajoute ici
    Benoit Breton
    34
    France
    12
    5 // ici
    Jean Flou
    65
    Belgique
    53
    Nombre 
    3
    2 // ici
    Street Art
    Sabart Deco
    32
    France
    14
    7 // ici
    Laurent Pez
    23
    Suisse
    4 // Mais pas là
    Nombre
    2
    Nombre Total d'exposant
    5
    On pourrait expliquer ceci par un rubrique qui concerne le nombre d'œuvre à vendre.
    Le dernier exposant ne vendrait aucune de ses œuvres exposés (encore un excentrique)

    Et là ma méthode de lecture prends un coup dans le PIF. (Si je tenais le type qui m'a pondu un export aussi foireux que ça...)

    Si vous avez une idée sur comment ne pas se pendre devant ce genre de problème je suis preneur.

    Merci pour votre aide

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 545
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 545
    Par défaut
    ça fait un champ en plus par rapport au début du coup.
    la seule façon (qui me vient) c'est de tester si tu lis un entier quand tu arrives sur cette ligne, si oui, alors tu as ta valeurs, sinon, passer à la zone suivante

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/12/2008, 12h00
  2. Document Non Enregistré
    Par rickgoz dans le forum Excel
    Réponses: 19
    Dernier message: 09/11/2008, 14h24
  3. Réponses: 2
    Dernier message: 16/06/2007, 16h59
  4. Document non enregistré
    Par domimog dans le forum Excel
    Réponses: 4
    Dernier message: 29/05/2007, 07h46
  5. [DOM] Sérialiser un Document avec le DOCTYPE.
    Par Vignot dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 16/08/2005, 09h35

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