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

WinDev Discussion :

Générer une structure


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2016
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2016
    Messages : 12
    Points : 10
    Points
    10
    Par défaut Générer une structure
    Bonjour,

    Exist-il une fonction qui permet de générer une structure d'une source des données puis l'affecter dans une variable
    Code Actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Déclarer une structure
    Produit est une structure
            CODE est un entier
            LIBELLE est une chaîne
            Etc..
    FIN
    MaStruct est un Produit

    Je voudrais un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Déclarer une structure
    MaStruct est une Fonction_Générer_Structure(Produit)
    Cordialement
    Mimouni

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Vous devriez prendre l'habitude d'indiquer la version de Windev qui est concernée.
    Dans le cas présent, la réponse varie en fonction de votre version.

    Dans l'absolu, la réponse est non.
    Il n'y a pas de fonction permettant de déclarer une variable (simple ou avancée), au même titre que la fonction ChampCrée() permet de créer un champ (depuis la V19).
    Donc, croisons les doigts, surtout si on considère ce que je relève plus loin à propos des variants.

    Maintenant, il me semble que depuis la version 19, on devrait pouvoir s'arranger et même mieux que s'arranger.
    Comme je suis en V18, je n'ai pas testé, mais je le ferai bientôt sur la V20Express.

    Le principe serait le suivant :
    - HDécritFichier permet de décrire un fichier
    - HdécritRubrique permet de décrire une rubrique d'un fichier
    - FichierVersMémoire initialise automatiquement les membres d'une structure avec les valeurs des rubriques de l'enregistrement en cours d'un fichier
    - ces mêmes rubriques du fichier peuvent, le cas écéhant, être réinitialisée par la fonction HRAZ.

    Et, enfin, depuis la V19,les variants supportent 1. l'utilisation de membres nommés ou indicés 2. sans déclaration préalable.
    Lors de l'affectation d'une valeur à un membre d'un variant, il est créé s'il n'existe pas, tandis qu'il est modifié s'il existe.
    On peut aussi tester si un membre existe.
    Les variants avec des membres indicés peuvent être manipulés comme des tableaux.
    Les variants supportent un indiçage des membres nommés.
    Bref, on se trouve devant un type terriblement puissant qui ressemble à une collection de structures et dont la déclaration serait automatique (plutôt que dynamique) sous réserve de disposer de l'élément variant racine.
    Sous réserve de test, c'est vraiment prometteur et vous devriez pouvoir vous y retrouver.

    Créer le squelette de la structure au moyen de HDécritFichier et Rubrique.
    Affecter cette structure au variant au moyen de FichierVersMémoire.
    La grande question est de savoir si Windev va traiter ce variant 'simple' comme une structure ou déclarer qu'il y a erreur sur la variable ?
    Ensuite, détruire la description du fichier et de ses rubriques, qui ne seront plus d'aucune utilité.
    A gérer sous forme d'une procédure globale qui vous donnera le type de codage dont vous souhaitez disposer.

    Il faut commencer par tester l'affectation d'une structure classique à un variant : Variant <= Structure avec <= pour forcer une copie plutôt qu'une prise de référence.
    Cela devrait fonctionner, mais n'offre aucune garantie sur le type de contrôle qui est effectué par FichierVersMémoire() sur le type de la variable de destination.
    La fonction VariantConvertit() ne convertit que vers des types simples, càd ne permettra pas de déclarer que le variant est de type structure.
    VariantConvertit() ne sera donc d'aucune utilité au cas où FichierVersMémoire() n'accepterait qu'une classe ou une structure comme variable de destination


    J'espère que vous aurez le courage d'entreprendre les tests.
    Je suis impatient de connaître les résultats.

    Bon travail,

    Hemgé

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    303
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 303
    Points : 812
    Points
    812
    Par défaut Utiliser la fonction JSONVersVariant
    Bonjour à tous,

    Ma contribution pour compléter l'excellente réponse d'Hemgé (que le lecteur débutant en Windev devra au moins relire 10 fois car très riche en informations).

    Je te propose de passer par une description JSON (dans une chaîne) et ensuite d'utiliser la fonction JSONVersVariant.
    http://doc.pcsoft.fr/fr-FR/?10000210...SONVersVariant

    C'est pas mal pour du "tout dynamique".

  4. #4
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par Mimouni Mohamed Voir le message
    Bonjour,

    Exist-il une fonction qui permet de générer une structure d'une source des données puis l'affecter dans une variable
    Code Actuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    // Déclarer une structure
    Produit est une structure
            CODE est un entier
            LIBELLE est une chaîne
            Etc..
    FIN
    MaStruct est un Produit

    Je voudrais un truc comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Déclarer une structure
    MaStruct est une Fonction_Générer_Structure(Produit)
    Cordialement
    Mimouni
    Bonjour,
    Il n'existe pas pour le moment, mais il est possible de le créer en utilisant hlisterubrique ou hlistefichier et avec un code comme suit

    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
     
    vVariant is Variant
     
    sLsCode is string = 
    [
    	MyStr is structure
    		Id is int
    		Name is string
    	END
    	Person is MyStr 
    	RESULT Person
    ]
     
    vVariant = ExecuteCode(sLsCode)
    info(vVariant.Name)

  5. #5
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Je me permets d'ajouter ma contribution...

    Il est maintenant possible (depuis la v19) de générer une pseudo structure basée sur la définition des tables (fichiers pour parler Windev) de l'analyse.

    Pour ce faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    toto est un Enregistrement de <MaTable>
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

  6. #6
    Membre averti Avatar de tunizar
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    573
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 573
    Points : 427
    Points
    427
    Par défaut
    Citation Envoyé par michel.souris Voir le message
    Je me permets d'ajouter ma contribution...

    Il est maintenant possible (depuis la v19) de générer une pseudo structure basée sur la définition des tables (fichiers pour parler Windev) de l'analyse.

    Pour ce faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    toto est un Enregistrement de <MaTable>
    Bonjour,
    oui c'est vrai !! j'ai oublié ça

  7. #7
    Expert confirmé
    Homme Profil pro
    ?
    Inscrit en
    Juillet 2002
    Messages
    2 378
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : ?

    Informations forums :
    Inscription : Juillet 2002
    Messages : 2 378
    Points : 4 494
    Points
    4 494
    Par défaut
    Bonjour

    Entièrement d'accord avec Michel : le type Enregistrement répond certainement au besoin

    De plus c'est "sérialisable"/"désérialisable"

  8. #8
    Candidat au Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 1
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    toto est un Enregistrement de <MaTable> : OK

    mais

    MonTableau est un tableau d'Enregistrements de <MaTable>
    -> la fonction TableauCherche plante lamentablement
    -> la fonction FichierVersTableau plante si le fichier contient une clé composée.
    depuis la V19

    PC Soft le sait mais n'agit pas...

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2009
    Messages
    1 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2009
    Messages : 1 278
    Points : 2 151
    Points
    2 151
    Par défaut
    Citation Envoyé par WDPeï Voir le message
    Bonjour,

    toto est un Enregistrement de <MaTable> : OK

    mais

    MonTableau est un tableau d'Enregistrements de <MaTable>
    -> la fonction TableauCherche plante lamentablement
    -> la fonction FichierVersTableau plante si le fichier contient une clé composée.
    depuis la V19

    PC Soft le sait mais n'agit pas...
    En attendant la vXX qui corrigera (peut être, partiellement, vaguement, par hasard - rayer la mention inutile) ce problème, c'est bon à savoir ! Merci pour l'information...
    SQL : le véritable Esperanto

    "Les patates à ta tata épatent ton tonton mais les pates aux thons à ton tonton épatent pas ta tata." (Michel Souris)

    MERCI DE NE PAS M'ENVOYER DE MESSAGE PRIVE POUR DES QUESTIONS TECHNIQUES SANS MON ACCORD !

Discussions similaires

  1. Réponses: 1
    Dernier message: 31/03/2015, 08h31
  2. Réponses: 3
    Dernier message: 06/02/2009, 13h44
  3. [toFAQ][socket] Envoi d'une structure
    Par julien20vt dans le forum C++
    Réponses: 15
    Dernier message: 23/04/2003, 15h47
  4. Générer une liste
    Par pfredin dans le forum Langage SQL
    Réponses: 6
    Dernier message: 02/04/2003, 15h30
  5. longueur d'une structure
    Par bohemianvirtual dans le forum C
    Réponses: 6
    Dernier message: 28/05/2002, 18h31

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