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:
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:
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.
Désérialiser un document mal structuré
C'était trop beau pour être vrai.
StringBuilder tu as fais du super boulot.
Mais malheureusement mon véritable fichier est beaucoup plus mal structuré que mon exemple.
Si je reprends ma transposition (Je suis désolé je ne peux soumettre la véritable source pour des raisons de confidentialité) :
Code:
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 75 76 77 78 79 80
|
03/04/2023
Désérialisation un grand classique
243
Rue de LAMBREYAGE
59450
Sin-le-Noble
Liste des Artiste
Art Contemporain
Emplacement
Nom
Age
Pays
Goodies
Expos
Sell
1
Matthieu dethé
45
France
23
18
2
Benoit Breton
34
France
12
5
3
Jean Flou
65
Belgique
53
Nombre
3
Street Art
Emplacement
Nom
Age
Pays
Goodies
Expos
Sell
1
Sabart Deco
32
France
140
7
2
Laurent Pez
23
Suisse
4
Nombre
2
Art Grotesque
Emplacement
Nom
Age
Pays
Goodies
Expos
Sell
1
Grouchy Deco
32
France
9999
71
4
2
Masset Pez
23
Suisse
4
Nombre
2
Nombre Total d'exposant
7" |
A priori j'ai la même structure que présenté précédemment, à la différence que la liste des exposants est précédée par l'intitulé des valeurs.
ça n'est pas compliqué à remédier avec un regex dans la class Category :
Code:
1 2 3 4 5 6 7 8 9 10 11
|
if (!Regex.IsMatch(lines[i], "^(Nom||Age||Pays||Goodies||Expos||Sell)$"))
{
(Participant participant, int readlines) = Participant.Deserialize(lines[i..(i + 5)]);
category.Participants.Add(participant);
i += readlines;
}
else
{
i++;
} |
Mais là où cela devient tordu, c'est sur les valeurs en rouge.
Elles représentent dans le logiciel la valeur des goodies, et l'on peut constater que certain en expose et d'autre pas.
Ce qui rends inexploitable l'export.
Je suis encore une fois preneur de propositionS...