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 :

Type énuméré, fichiers binaires


Sujet :

Langage Delphi

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 159
    Points : 81
    Points
    81
    Par défaut Type énuméré, fichiers binaires
    Bonjour,

    Je voudrais avoir la confirmation d'un de mes raisonnement :

    Si je veux réaliser une application carnet d'adresse en utilisant un fichier binaire et de types énumérés :

    Je réalise un Record :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    type
      TFiche = record
        Nom,
        Prenom: string[255];
        Adresse : TAdresse;
      end;
    Et une base TAdresse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TAdresse = (Au fond du jardin, En bas à droite, En bas à gauche);

    Et hop je crée des fiches personnes en utilisant l'Integer correspondant à mon TAdresse plutôt que de stocker l'adresse ?!
    Cela paraît il logique ? Cela permet il de stocker une seule fois chaque adresse (sachant que beaucoup de personnes ont la même adresse) ?

    Comment faire pour permettre à mon TAdresse d'être évolutif ? Utiliser un Array ?

    Merci d'avance,
    P.

  2. #2
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    469
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 469
    Points : 1 100
    Points
    1 100
    Par défaut
    Bonjour,

    Il est intéressant d'utiliser un type énuméré quand on connait toutes les valeurs possibles, et surtout quand cela améliore la lisibilité des sources, et/ou la portabilité.

    Dans ton exemple, ce n'est pas du tout le cas.

    Si tu tiens à enregistrer des numéros d'adresses, un entier suffisamment long sera bien plus adapté.

    Bon courage,

    Martinux
    Cordialement,
    Tintinux

    Initiateur de Gestinux, une comptabilité gestion open-source, pour Linux, Windows et Mac OS.
    Une version stable et une autre en développement, avec Lazarus : vous pouvez aider à la tester, la traduire et à la développer.

  3. #3
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 945
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 945
    Points : 5 659
    Points
    5 659
    Par défaut
    Foe,

    Pour les adresses, on utilise généralement des chaines de caractères.

    Plusieurs chaines, au moins 3 :
    - le nom / prénom,
    - la rue / place ...
    - code postal + ville

    La difficulté étant d'ailleurs d'avoir suffisamment de lignes pour n'importe quelle adresse (la mienne en prend officiellement 7 !!).
    C'est par contre aisément résolu en utilisant une base de données.
    Si les cons volaient, il ferait nuit à midi.

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 159
    Points : 81
    Points
    81
    Par défaut
    Bonsoir à tous,

    Imaginons que je veuille maintenant ajouter la faculté dans laquelle la personne étudie ?!!

    Je donne cela comme exemple.
    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TFaculte = (Droit,Medecine,Odontologie,Pharmacie,Math,Physique);
    Si jamais je voulais faire évoluer les disciplines ? Comment dois je m'y prendre ?

    @droggo : quand tu parles de bases de données, tu penses à quoi (lié à delphi) ?

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 49
    Points : 47
    Points
    47
    Par défaut
    Tu peux utiliser celà:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    TFiche = record
       Nom,Prenom: string[255];
       Adresse : TAdresse;
       Faculté: Array[0..255] Of Boolean;
    End; 
    TEnsembleDeFiches = record
      FacultéName: Array[0..255] Of ShortString;
      LesFiches: Array Of TFiches
    End;
    S'il faut encore faire évoluer, tu peux ajouter une version de fichier lors de la sauvegarde, puis lors du rechargement selon la version de fichier tu typecastes les données en TEnsembleDeFiche0, TENsembleDeFiche1 etc.
    Celà dit les bdd permettent une évolutivité des enregistrements et des champs, alors qu'en utilisant des Records et des tableaux celà peut vite devenir galère.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 531
    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 531
    Points : 25 070
    Points
    25 070
    Par défaut
    Sans jugement sur le choix technique, je répondrais simplement par l'utilisation d'une structure variable (j'espère que cela passe en fichier, si tu as utilisé file of ... bof bof, si tu as utilise BlockWrite ou Stream, aucun soucis)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    type
      TFiche = record
        Nom,
        Prenom: string[255];
        case Boolean of
           True: (
              Adresse : TAdresse; // de 0 à 7
              Spare: Array[0..2] of Byte); // En fonction du nombre dans l'énumération, le stockage change, faut complèter à 3 Octets
           False: (
              AdresseBin: Cardinal);
        end;
      end;
    1 Byte (Octet) = 8 Valeurs
    2 Bytes = 16 Valeurs
    3 Bytes = 24 Valeurs
    4 Bytes = 32 Valeurs
    C'est la limite si tu pars sur un Cardinal
    C'est le principe du Champ de Bit du C : Champ de bits en delphi

    Ensuite faut passer à un Array of Byte, jusqu'à un maximal de 32 Bytes pour 256 Valeurs
    Regarde la fonction SizeOfSetShai dans le sujet Récupérer le 1° élément d'un SET OF
    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

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 159
    Points : 81
    Points
    81
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses.
    J'aime bien l'idée du champ de bits. La limite est cependant palpable.

    Il est vrai qu'il serait plus simple peut être de partir en BDD relationnelle ?
    Est il possible sous Delphi de créer, modifier, etc... des tables comme on le ferait sous MS Access ? Ou faut il avoir installer un serveur annexe ?


    Merci de vos commentaires.
    P.

  8. #8
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 531
    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 531
    Points : 25 070
    Points
    25 070
    Par défaut
    Tu peux utilise ACCESS via ADO, faut juste configurer l'Alias ODBC pour obtenir une chaine de connexion (c'est peut-être même pas obligé ?), ensuite c'est du SQL façon ACCESS !

    Sinon, tu peux partir sur d'autres DB, tu as des versions embedded de MySQL, SQLite, PostgreSQL (un simple package de DLL accompagnant ton exe) ... ou encore Paradox avec le BDE (ça faut le déployer avec Install Shield par exemple), ...

    Tu n'imagines même pas toutes les possiblités de Delphi, il doit bien y a voir une dizaine de famille de composant d'accès DB (BDE, ADO, DBExpress, IBX, Zeos, Devart, ...), évidemment le choix de la lib d'accès dépend aussi de sa facilité d'utilisation avec tel ou tel DB ...
    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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/04/2015, 12h23
  2. Nosql - Fichiers Binaires - type de base
    Par jcaspar dans le forum NoSQL
    Réponses: 1
    Dernier message: 16/06/2014, 08h00
  3. type de donnée pour un fichier binaire.
    Par cbleas dans le forum Modélisation
    Réponses: 9
    Dernier message: 14/01/2009, 21h26
  4. Reprise de donnée d'un fichier binaire type en C
    Par vedge2000 dans le forum Langage
    Réponses: 5
    Dernier message: 15/12/2008, 07h36
  5. Réponses: 2
    Dernier message: 02/10/2007, 19h25

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