PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → Désérialiser un tableau
Désérialiser un tableau
Iniciado por notrefaq2109, 03,oct. 2019 12:48 - 11 respuestas
Publicado el 03,octubre 2019 - 12:48
Bonjour

Je veux désérialiser le contenu d'un tableau. Le contenu est sous forme d'un enregistrement d'un fichier (IDAGence,Agence et IDVille) voir l'image
Après je veux affecter chaque lecture de ces rubriques vers un fichier qui a la même structure comme par exemple:

AGENCE.IDAgence=Tableau(IDAgence) en XML
AGENCE.Agence=Tableau(Agence) en XML
AGENCE.IDVille=Tableau(IDVille) en XML
Hajoute(AGENCE)

Pour cela je faisait le code suivant mais j' ai des messages d'erreurs

Rubrique est une structure
Nom est une chaîne
Contenu est une chaîne
FIN
sRubrique est une chaîne
tabRecord est un tableau dede Rubrique
stLaRubrique est une Rubrique
bufBuffer est un Buffer
sListeRubrique =HListeRubrique(Fichiers,hLstRubrique+hLstClé)
POUR TOUT CHAÎNE sRubrique de sListeRubrique SEPAREE PAR RC
stLaRubrique.Nom = sRubrique

stLaRubrique.Contenu =Fichiers.Contenu

TableauAjoute(tabRecord,stLaRubrique.Contenu) // ici m'affiche le message: " Exception : On ne peut pas affecter à une structure autre chose qu'une structure de même définition."

FIN

//Ici j'ai le message
Désérialise(tabRecord,bufBuffer,psdXML)

//Ici je veux faire l'affectation depuis le tableau vers mon fichier
AGENCE.IDAgence=tableau(IDAgence) en XML
AGENCE.Agence=tableau(Agence) en XML
AGENCE.IDVille=tableau(IDVille) en XML
HAjoute(AGENCE)


Je me suis bloqué et séché, aidez moi pour corriger mon code

Merci d'avance pour vos aides




Publicado el 03,octubre 2019 - 15:24
Pas de réponse
Miembro registrado
4.361 mensajes
Publicado el 03,octubre 2019 - 16:24
eh ben non.
Les réponses sur ce forum sont données par des bénévoles.
Il faut leur laisser le temps de passer sur le forum de réfléchir et de répondre.

--
Il y a peut être plus simple, mais, ça tourne
Publicado el 03,octubre 2019 - 16:42
Merci Voroltinquo pour ton retour

Oui, je sais... vraiment je suis bloqué
Miembro registrado
4.361 mensajes
Publicado el 03,octubre 2019 - 20:10
Le message de l'exception est clair :
Dans ta fonction TableauAjoute, tu n'ajoutes qu'un membre de la structure au lieu de la structure complète. Il faut supprimer ".Contenu"
Tu a déclaré un tableau de structure, tu ne peux lui ajouter que des structures de même type

--
Il y a peut être plus simple, mais, ça tourne
Publicado el 04,octubre 2019 - 10:36
Merci pour ton aide

Pour la première fois que j'ai appliqué les fonctions sérialise/déserialise c'est pour cela j'ai trouvé des difficultés; merci de me donner encore des pistes je serai reconnaissant.

Alors j'ai enlevé le membre ".Contenu" ma fonction devient :

TableauAjoute(tabRecord,stLaRubrique)
//Mais je ne vois pas comment le tableau sera remplit


Pour la déserialisation j'ai le message : Exception : Le document XML n'a pas pu être chargé.
Désérialise(tabRecord,bufBuffer,psdXML)


Merci encore une fois
Miembro registrado
4.361 mensajes
Publicado el 04,octubre 2019 - 12:29
Faque a écrit :
//Mais je ne vois pas comment le tableau sera remplit

Imagine un tableau sur 2 colonnes, la première correspondant au nom, la deuxième au contenu, cette instruction remplit simultanément la colonne nom et contenu en considérant la structure comme une entité unique
https://doc.pcsoft.fr/fr-FR/?20030&name=CLF_Manipuler_un_tableau_de_structures

--
Il y a peut être plus simple, mais, ça tourne
Mensaje modificado, 04,octubre 2019 - 12:31
Publicado el 04,octubre 2019 - 12:52
Oui j'ai compris maintenant et j'ai reformulé mon code mais j'ai un petit souci les contenus sont vides
Rubrique est une structure
Nom est une chaîne
Contenu est une chaîne
Fichier est une chaîne
FIN
strfic est une structure
IDFAgence est un entier sur 8
Agence est une chaîne
idfville est un entier sur 8 octets
FIN
tabRecord est un tableau de strfic
POUR TOUT CHAÎNE sRubrique de sListeRubrique SEPAREE PAR RC
stLaRubrique.Nom = sRubrique
stLaRubrique.Contenu =LigneEnregistrement.Contenu
stLaRubrique.Fichier =LigneEnregistrement.Table

TableauAjoute(tabRecord,stLaRubrique)

FIN

tabDeserialise est un tableau dede Rubrique
Sérialise(tabRecord,bufBuffer,psdXML) // A ce passage que je vois le souci
Désérialise(tabDeserialise,bufBuffer,psdXML)

POUR TOUT stUneRubrique de tabDeserialise

{stUneRubrique.Fichier+"."+sRubrique,indChamp} ={sRubrique,indRubrique}
HAjoute({stUneRubrique.Fichier,indFichier}

FIN


Merci encore une fois
Miembro registrado
4.361 mensajes
Publicado el 04,octubre 2019 - 14:45
Pourquoi passer par 2 structure ?
Il faut dans une premier temps que la structure resp la classe ait des membre dont le nom est le même que celui de la table, l'idéal est de passer par une classe mappée. (CAgence)
https://blogs.pcsoft.fr/fr/generer-classes-partir-descriptions-tables-contenues-analyse-projet/281474976710689/read.awp.
Dans un deuxième temps que les membres soient dans le même ordre que celui de la description du fichier XML.
A peu de chose près le code devrait ressembler à ça :
tabAgencesRécupérées est tableau de CAgence
clAgenceTraitée est CAgence
bufAgence est buffer //buffer que tu as récupéré via le WS

Désérialise(tabAgencesRécupérées,bufAgence,pdXML)
POUR TOUT clAgenceTraitée de tabAgenceRécupérées
MémoireVersFichier(clAgenceTraitée,Agence)
HAjoute(Agence)
FIN


Pour la sérialisation, c'est encore plus simple
tabAgencesAEnvoyer est tableau de CAgence
bufAgence est buffer //buffer à retourner par le WS

FichierVersTableau(tabAgencesAEnvoyer)
Sérialise(tabAgencesRécupérées,bufAgence,pdXML)


--
Il y a peut être plus simple, mais, ça tourne
Publicado el 04,octubre 2019 - 18:07
Merci Voroltinquo

Je ne voulais pas passer par des classes , tout simplement parce que j'ai beaucoup des fichiers et le code sera un peu long (chaque fichier je dois le mappé (classe);
C'est pour cela je suis penché vers les indirections afin de minimiser le code. Mon but c'est crée une réplication
Miembro registrado
4.361 mensajes
Publicado el 04,octubre 2019 - 23:59
Faque a écrit :
Je ne voulais pas passer par des classes , tout simplement parce que j'ai beaucoup des fichiers et le code sera un peu long (chaque fichier je dois le mappé (classe);

Dans tout les cas de figure, il faudra quand même déclarer les structures. D'autre part le mapping peut se faire automatiquement via l'explorateur de projet.

--
Il y a peut être plus simple, mais, ça tourne
Publicado el 05,octubre 2019 - 06:57
Merci Voroltinquo