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

Langage Delphi Discussion :

Organisation des données parsées.


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Points : 63
    Points
    63
    Par défaut Organisation des données parsées.
    Bonjour,

    Je dois traiter un fichier XML qui me donnera la liste d'instruction à exécuter par mon programme.
    Cette liste se compose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <read nom="maVar" type="bool" />
    <write nom="maVar" type="int" value="32" />
    Ma question est la suivante : Comment structurer les données dans mon programme ?
    J'avais pensé à des record, mais il me faudrait un record par type à lire. Ce qui multiplie les déclarations mais simplifie le traitement.
    Ou alors j'enregistre dans un record contenant que des Strings, ce qui facilite la création mais complique grandement le traitement.

    Je ne vois que ces 2 possibilités. Je pense que le mieux serait encore d'organiser ma liste comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <readBool nom="maVar" />
    <writeInt nom="maVar2" value="32"/>
    Mais je ne suis pas sûr d'avoir pensé à toute les possibilités ( Surtout celles qui font office de bonnes pratiques)
    Qu'en pensez-vous ? Je ne voudrais pas faire de mauvais choix d'entrée.
    Merci d'avance

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Utilise un TXMLDocument,
    soit en mode manuel avec les IXMLNode, tu pourras créer ta propre couche objet qui encapsule cela
    soit avec l'expert qui peut générer un structure avec typage fort de ton XML (ou XSD) et donc te fournit déjà la couche objet mais tu aussi encapsuler le tout

    Perso, j'aime bien séparé la couche purement structure de donnée XML de la couche objet "métier", surtout que le IXMLNode n'est pas le plus léger en mémoire !

    Pour moi, la 1ère variante est plus ouverte *
    Je pense qu'il ne faut pas trop de torturer et utiliser le format de XML qui te convient le mieux !

    * regarde le XML généré par un TClientDataSet, cela peut être instructif !
    D'ailleurs, tu peux pourrais l'utiliser, le TClientDataSet c'est un DataSet, tu peux faire trois colonne, Opération (Read\Write), Type (Int, bool), Value (32)
    le XML est plus lourd mais en terme de code c'est ultra simple à coder si tu connais bien les TDataSet (le TTable est très proche)
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Points : 63
    Points
    63
    Par défaut
    Merci pour ta réponse,

    En fait j'utilise xmlparser j'aurai peu être dû préciser...
    Mon souci n'est pas de lire le fichier mais bien de trouver le meilleur moyen de traiter les infos. Tant que je n'ai pas parser le xml je ne peux pas savoir quel type de variable je devrais traiter. (blob, integer, boolean ou String). Ce qui fait que je ne sais pas quoi allouer. Je pourrais allouer une variable de chaque et n'utiliser que celle dont j'ai besoin, mais question mémoire ce n'est pas top.

    Donc soit je traite au moment ou je parse et créer des record de différents types contenant le nom et la valeur déjà typée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TReadBoolean record
      name : string
      value : boolean
    end;
    soit je stock à la volée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    TRead record
      name : string
      value : string
    end;
    et je fais le traitement au moment de la lecture. les 2 cas on leurs avantages et inconvénients mais je n'arrive pas à dire ce qui est mieux.

  4. #4
    Modérateur
    Avatar de tourlourou
    Homme Profil pro
    Biologiste ; Progr(amateur)
    Inscrit en
    Mars 2005
    Messages
    3 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Biologiste ; Progr(amateur)

    Informations forums :
    Inscription : Mars 2005
    Messages : 3 862
    Points : 11 321
    Points
    11 321
    Billets dans le blog
    6
    Par défaut
    Et les records à partie variable ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type
      TMyRec = record
      case Format: TMyFormat of
        ftInt: (AsInteger: integer);
        ftBool: (AsBoolean: Boolean);
      end;
    Delphi 5 Pro - Delphi 11.3 Alexandria Community Edition - CodeTyphon 6.90 sous Windows 10 ; CT 6.40 sous Ubuntu 18.04 (VM)
    . Ignorer la FAQ Delphi et les Cours et Tutoriels Delphi nuit gravement à notre code !

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2006
    Messages : 47
    Points : 63
    Points
    63
    Par défaut
    Citation Envoyé par tourlourou Voir le message
    Et les records à partie variable ?
    Le problème de cette méthode est que le compiler alloue la mémoire en fonction du plus grand record possible.

    J'ai donc utilisé cette méthode mais pour avoir le pointeur sur la structure que je veux allouer.
    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    type
      TMyRec = record
      case Format: TMyFormat of
        ftInt: (PInt: PTStructInt);
        ftBool: (PBool : PTStructBool);
      end;
    Je ne sais pas si c'est la meilleure des méthodes mais ça me convient
    Merci pour votre aide

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 522
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 522
    Points : 25 052
    Points
    25 052
    Par défaut
    Je crois que je n'avais pas compris l'axe de la question
    J'ai répondu d'un point vue Orienté Objet avec utilisation de Polymorphisme (à la façon du TField)
    alors que c'était juste une problématique d'occupation mémoire

    Comme c'est marqué
    je ne serais pas lu mais il existe un type Variant que fera très bien ce travail ou même utiliser directement TVarData !

    Si vraiment se pose un problème de performance (peut-être avec un XML de plusieurs Go), ce TMyRec pourrait être envisager
    mais vu que toutes la couche DB de Delphi,
    le TXMLDocument et un bon nombre de système équivalent
    fonctionne à base de Variant encapsuler des objets ce qui en terme d'occupation mémoire est bien plus lourd
    et ça fonctionne ainsi au moins depuis Delphi 4
    où l'on avait que 128Mo pour l'OS, Delphi et son propre programme !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

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

Discussions similaires

  1. Organisation des données pour affichage.
    Par Edta dans le forum Agents de placement/Fenêtres
    Réponses: 2
    Dernier message: 28/07/2009, 11h18
  2. organisation des données
    Par robindelhuxley dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/07/2008, 15h13
  3. Problème d'organisation des données dans un jeu de stratégie
    Par khayyam90 dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 15/06/2007, 17h13
  4. tomcat, upload et organisation des donnèes
    Par Pikwik dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 05/09/2006, 10h59
  5. [SWT]organisation des données dans un gridlayout
    Par whilecoyote dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 19/12/2005, 17h24

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